2012-11-02 02:08:03 +04:00
/*-*- 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 < http : //www.gnu.org/licenses/>.
* * */
# 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 {
2014-06-22 21:36:31 +04:00
char * name ;
2012-11-02 02:08:03 +04:00
int fd ;
2014-07-02 08:15:37 +04:00
bool passive_fd ;
2012-11-02 02:08:03 +04:00
char * buf ;
2014-07-12 07:20:08 +04:00
size_t size ; /* total size of the buffer */
size_t offset ; /* offset to the beginning of live data in the buffer */
size_t scanned ; /* number of bytes since the beginning of data without a newline */
size_t filled ; /* total number of bytes in the buffer */
2015-03-02 18:34:51 +03:00
size_t field_len ; /* used for binary fields: the field name length */
size_t data_size ; /* and the size of the binary data chunk being processed */
2012-11-02 02:08:03 +04:00
struct iovec_wrapper iovw ;
source_state state ;
dual_timestamp ts ;
2014-07-02 08:15:37 +04:00
Writer * writer ;
2012-11-02 02:08:03 +04:00
sd_event_source * event ;
2015-03-13 07:02:28 +03:00
sd_event_source * buffer_event ;
2012-11-02 02:08:03 +04:00
} RemoteSource ;
2014-07-02 08:15:37 +04:00
RemoteSource * source_new ( int fd , bool passive_fd , char * name , Writer * writer ) ;
2014-07-02 07:07:45 +04:00
static inline size_t source_non_empty ( RemoteSource * source ) {
2012-11-02 02:08:03 +04:00
assert ( source ) ;
2014-07-02 07:07:45 +04:00
return source - > filled ;
2012-11-02 02:08:03 +04:00
}
void source_free ( RemoteSource * source ) ;
2014-03-15 23:58:03 +04:00
int push_data ( RemoteSource * source , const char * data , size_t size ) ;
2014-07-02 08:15:37 +04:00
int process_source ( RemoteSource * source , bool compress , bool seal ) ;