X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Finclude%2Futils%2Fproto.h;h=a872dd51b309c6a05a659d9ea4e70a70933fdf35;hp=9d4748a43ce879a662c38624ffd01622b61e7ad3;hb=d25f3c59b5cf5387acd4e6d1467ce9efffa40f9a;hpb=9610de881cfcd9bd15e064230714ae15cf621885 diff --git a/src/include/utils/proto.h b/src/include/utils/proto.h index 9d4748a..a872dd5 100644 --- a/src/include/utils/proto.h +++ b/src/include/utils/proto.h @@ -28,7 +28,7 @@ #ifndef SDB_UTILS_PROTO_H #define SDB_UTILS_PROTO_H 1 -#include "utils/strbuf.h" +#include "core/data.h" #include #include @@ -37,27 +37,38 @@ extern "C" { #endif -enum { - SDB_PROTO_SELECTIN = 0, - SDB_PROTO_SELECTOUT, - SDB_PROTO_SELECTERR, -}; - /* - * sdb_proto_select: - * Wait for a file-descriptor to become ready for I/O operations of the - * specified type. This is a simple wrapper around the select() system call. - * The type argument may be any of the SDB_PROTO_SELECT* constants. - * - * Returns: - * - the number of file descriptors ready for I/O - * - a negative value on error + * sdb_proto_host, sdb_proto_service, sdb_proto_metric: + * Protocol-specific representations of the basic information of stored + * objects. */ -int -sdb_proto_select(int fd, int type); +typedef struct { + sdb_time_t last_update; + const char *name; +} sdb_proto_host_t; -ssize_t -sdb_proto_send(int fd, size_t msg_len, const char *msg); +typedef struct { + sdb_time_t last_update; + const char *hostname; + const char *name; +} sdb_proto_service_t; + +typedef struct { + sdb_time_t last_update; + const char *hostname; + const char *name; + const char *store_type; /* optional */ + const char *store_id; /* optional */ +} sdb_proto_metric_t; + +typedef struct { + sdb_time_t last_update; + int parent_type; + const char *hostname; /* optional */ + const char *parent; + const char *key; + const sdb_data_t *value; +} sdb_proto_attribute_t; /* * sdb_proto_marshal: @@ -66,16 +77,79 @@ sdb_proto_send(int fd, size_t msg_len, const char *msg); * the header (64 bits) and the entire message. * * Returns: - * - the number of bytes of the full encoded message on success (even if less - * than that fit into and was written to the buffer) + * - The number of bytes of the full encoded message on success. The function + * does not write more than 'buf_len' bytes. If the output was truncated + * then the return value is the number of bytes which would have been + * written if enough space had been available. * - a negative value on error */ ssize_t sdb_proto_marshal(char *buf, size_t buf_len, uint32_t code, uint32_t msg_len, const char *msg); -uint32_t -sdb_proto_get_int(sdb_strbuf_t *buf, size_t offset); +/* + * sdb_proto_marshal_data: + * Encode a datum into the wire format and write it to buf. + * + * Returns: + * - The number of bytes of the full encoded datum on success. The function + * does not write more than 'buf_len' bytes. If the output was truncated + * then the return value is the number of bytes which would have been + * written if enough space had been available. + * - a negative value else + */ +ssize_t +sdb_proto_marshal_data(char *buf, size_t buf_len, const sdb_data_t *datum); + +/* + * sdb_proto_marshal_host, sdb_proto_marshal_service, + * sdb_proto_marshal_metric, sdb_proto_marshal_attribute: + * Encode the basic information of a stored object into the wire format and + * write it to buf. These functions are similar to the sdb_store_ + * functions. See their documentation for details about the arguments. + * + * Returns: + * - The number of bytes of the full encoded datum on success. The function + * does not write more than 'buf_len' bytes. If the output was truncated + * then the return value is the number of bytes which would have been + * written if enough space had been available. + * - a negative value else + */ +ssize_t +sdb_proto_marshal_host(char *buf, size_t buf_len, + const sdb_proto_host_t *host); +ssize_t +sdb_proto_marshal_service(char *buf, size_t buf_len, + const sdb_proto_service_t *svc); +ssize_t +sdb_proto_marshal_metric(char *buf, size_t buf_len, + const sdb_proto_metric_t *metric); +ssize_t +sdb_proto_marshal_attribute(char *buf, size_t buf_len, + const sdb_proto_attribute_t *attr); + +/* + * sdb_proto_unmarshal_header: + * Read and decode a message header from the specified string. + * + * Returns: + * - the number of bytes read on success + * - a negative value else + */ +ssize_t +sdb_proto_unmarshal_header(const char *buf, size_t buf_len, + uint32_t *code, uint32_t *msg_len); + +/* + * sdb_proto_unmarshal_int32: + * Read and decode a 32-bit integer from the specified string. + * + * Returns: + * - the number of bytes read on success + * - a negative value else + */ +ssize_t +sdb_proto_unmarshal_int32(const char *buf, size_t buf_len, uint32_t *v); #ifdef __cplusplus } /* extern "C" */