From e5a8f900352b242860ac3dd4e3b39c7297169480 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 10 Apr 2014 21:04:27 +0200 Subject: Add support for multiple async message types --- src/async.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'src/async.c') diff --git a/src/async.c b/src/async.c index e0d4feb..28895b3 100644 --- a/src/async.c +++ b/src/async.c @@ -26,7 +26,6 @@ #include "async.h" #include "fastd.h" -#include "peer.h" void fastd_async_init(fastd_context_t *ctx) { @@ -34,7 +33,7 @@ void fastd_async_init(fastd_context_t *ctx) { } static void handle_resolve_return(fastd_context_t *ctx) { - fastd_resolve_return_t resolve_return; + fastd_async_resolve_return_t resolve_return; while (read(ctx->async_rfd, &resolve_return, sizeof(resolve_return)) < 0) { if (errno != EINTR) exit_errno(ctx, "handle_resolve_return: read"); @@ -69,5 +68,29 @@ static void handle_resolve_return(fastd_context_t *ctx) { } void fastd_async_handle(fastd_context_t *ctx) { - handle_resolve_return(ctx); + fastd_async_type_t type; + + while (read(ctx->async_rfd, &type, sizeof(type)) < 0) { + if (errno != EINTR) + exit_errno(ctx, "fastd_async_handle: read"); + } + + switch (type) { + case ASYNC_TYPE_RESOLVE_RETURN: + handle_resolve_return(ctx); + break; + + default: + exit_bug(ctx, "fastd_async_handle: unknown type"); + } +} + +void fastd_async_enqueue(fastd_context_t *ctx, fastd_async_type_t type, const void *data, size_t len) { + struct iovec vec[2] = { + { .iov_base = &type, .iov_len = sizeof(type) }, + { .iov_base = (void *)data, .iov_len = len }, + }; + + if (writev(ctx->async_wfd, vec, 2) < 0) + pr_error_errno(ctx, "fastd_async_enqueue"); } -- cgit v1.2.3