#include "collectd/lcc_features.h"
+#include "collectd/network.h" /* for lcc_security_level_t */
+#include "collectd/network_parse.h" /* for lcc_network_parse_options_t */
#include "collectd/types.h"
#include <stdint.h>
+#ifndef LCC_NETWORK_BUFFER_SIZE
+#define LCC_NETWORK_BUFFER_SIZE 1452
+#endif
+
LCC_BEGIN_DECLS
-/* lcc_value_list_writer_t is a write callback to which value lists are
- * dispatched. */
-typedef int (*lcc_value_list_writer_t)(lcc_value_list_t const *);
+/* lcc_network_parser_t is a callback that parses received network packets. It
+ * is expected to call lcc_network_parse_options_t.writer with each
+ * lcc_value_list_t it parses that has the required security level. */
+typedef int (*lcc_network_parser_t)(void *payload, size_t payload_size,
+ lcc_network_parse_options_t opts);
/* lcc_listener_t holds parameters for running a collectd server. */
typedef struct {
- /* conn is a UDP socket for the server to listen on. */
+ /* conn is a UDP socket for the server to listen on. If set to <0 node and
+ * service will be used to open a new UDP socket. If >=0, it is the caller's
+ * job to clean up the socket. */
int conn;
/* node is the local address to listen on if conn is <0. Defaults to "::" (any
* LCC_DEFAULT_PORT. */
char *service;
- /* writer is the callback used to send incoming lcc_value_list_t to. */
- lcc_value_list_writer_t writer;
-
- /* buffer_size determines the maximum packet size to accept. */
- uint16_t buffer_size;
+ /* parser is the callback used to parse incoming network packets. Defaults to
+ * lcc_network_parse() if set to NULL. */
+ lcc_network_parser_t parser;
- /* TODO(octo): User to password lookup. */
- /* char const * (*password_lookup) (char const *); */
+ /* parse_options contains options for parser and is passed on verbatimely. */
+ lcc_network_parse_options_t parse_options;
- /* TODO(octo): Minimal required security level. */
- /* int security_level; */
+ /* buffer_size determines the maximum packet size to accept. Defaults to
+ * LCC_NETWORK_BUFFER_SIZE if set to zero. */
+ uint16_t buffer_size;
/* interface is the name of the interface to use when subscribing to a
* multicast group. Has no effect when using unicast. */
- char *interface;
+ char *iface;
} lcc_listener_t;
/* lcc_listen_and_write listens on the provided UDP socket (or opens one using
* failure and does not return otherwise. */
int lcc_listen_and_write(lcc_listener_t srv);
-/* lcc_network_parse parses data received from the network and calls "w" with
- * the parsed lcc_value_list_ts. */
-/* TODO(octo): the Go code returns a []api.ValueList. Should we return a
- * value_list_t** here? */
-int lcc_network_parse(void *buffer, size_t buffer_size,
- lcc_value_list_writer_t w);
-
LCC_END_DECLS
-/* vim: set sw=2 sts=2 et : */
#endif /* LIBCOLLECTD_SERVER_H */