X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjournal-remote%2Fjournal-remote-parse.h;fp=src%2Fjournal-remote%2Fjournal-remote-parse.h;h=c1506d118d73759fe4975abc5a602d0150440ca4;hb=1e4e7b71e1938daa9b2b9718a9f54c69017a9ef5;hp=0000000000000000000000000000000000000000;hpb=5937a4d4f263a5a3254e081c6dbb1ea2f860d471;p=elogind.git diff --git a/src/journal-remote/journal-remote-parse.h b/src/journal-remote/journal-remote-parse.h new file mode 100644 index 000000000..c1506d118 --- /dev/null +++ b/src/journal-remote/journal-remote-parse.h @@ -0,0 +1,61 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +/*** + This file is part of systemd. + + Copyright 2014 Zbigniew Jędrzejewski-Szmek + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + systemd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with systemd; If not, see . +***/ + +#pragma once + +#include "sd-event.h" +#include "journal-remote-write.h" + +typedef enum { + STATE_LINE = 0, /* waiting to read, or reading line */ + STATE_DATA_START, /* reading binary data header */ + STATE_DATA, /* reading binary data */ + STATE_DATA_FINISH, /* expecting newline */ + STATE_EOF, /* done */ +} source_state; + +typedef struct RemoteSource { + char* name; + int fd; + + char *buf; + size_t size; + size_t filled; + size_t data_size; + + struct iovec_wrapper iovw; + + source_state state; + dual_timestamp ts; + + sd_event_source *event; +} RemoteSource; + +static inline int source_non_empty(RemoteSource *source) { + assert(source); + + return source->filled > 0; +} + +void source_free(RemoteSource *source); +int process_data(RemoteSource *source); +int push_data(RemoteSource *source, const char *data, size_t size); +int process_source(RemoteSource *source, Writer *writer, bool compress, bool seal);