diff options
Diffstat (limited to 'src/include/detail.h')
-rw-r--r-- | src/include/detail.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/src/include/detail.h b/src/include/detail.h new file mode 100644 index 0000000..5b5539b --- /dev/null +++ b/src/include/detail.h @@ -0,0 +1,97 @@ +#ifndef DETAIL_H +#define DETAIL_H +/* + * detail.h Routines to handle detail files. + * + * Version: $Id$ + * + */ + +RCSIDH(detail_h, "$Id$") + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum detail_state_t { + STATE_UNOPENED = 0, + STATE_UNLOCKED, + STATE_HEADER, + STATE_READING, + STATE_QUEUED, + STATE_RUNNING, + STATE_NO_REPLY, + STATE_REPLIED +} detail_state_t; + +/* + * Allow people to revert to the old behavior if desired. + * Also, use the old code if we don't have threads. + * FIXME: delete the old (crappy) code, and enable the new + * code to work without threads. One thing at a time... + */ +#ifndef WITHOUT_DETAIL_THREAD +# ifdef HAVE_PTHREAD_H +# define WITH_DETAIL_THREAD (1) +# endif +#endif + +typedef struct listen_detail_t { + fr_event_t *ev; /* has to be first entry (ugh) */ + char const *name; //!< Identifier used in log messages + int delay_time; + char const *filename; + char const *filename_work; + + TALLOC_CTX *ctx; + VALUE_PAIR *vps; + int work_fd; + +#ifdef WITH_DETAIL_THREAD + int master_pipe[2]; + int child_pipe[2]; + pthread_t pthread_id; +#endif + + FILE *fp; + off_t offset; + detail_state_t state; + time_t timestamp; + time_t running; + fr_ipaddr_t client_ip; + + off_t last_offset; + off_t timestamp_offset; + bool done_entry; //!< Are we done reading this entry? + bool track; //!< Do we track progress through the file? + + uint32_t load_factor; /* 1..100 */ + uint32_t poll_interval; + uint32_t retry_interval; + + int signal; + int packets; + int tries; + bool one_shot; + int outstanding; + int has_rtt; + int srtt; + int rttvar; + uint32_t counter; + struct timeval last_packet; + RADCLIENT detail_client; +} listen_detail_t; + +int detail_recv(rad_listen_t *listener); +int detail_send(rad_listen_t *listener, REQUEST *request); +void detail_free(rad_listen_t *this); +int detail_print(rad_listen_t const *this, char *buffer, size_t bufsize); +int detail_encode(UNUSED rad_listen_t *this, UNUSED REQUEST *request); +int detail_decode(UNUSED rad_listen_t *this, UNUSED REQUEST *request); +int detail_parse(CONF_SECTION *cs, rad_listen_t *this); + +#ifdef __cplusplus +} +#endif + +#endif /* DETAIL_H */ |