index 59200815482e9d5540837dfd1fce07e19fdfd743..aa28c96d1be99c57806dd79965ccc38ccf3ae2ce 100644 (file)
--- a/src/include/core/store.h
+++ b/src/include/core/store.h
#include "core/object.h"
#include "core/data.h"
#include "core/time.h"
#include "core/object.h"
#include "core/data.h"
#include "core/time.h"
-#include "utils/llist.h"
#include "utils/strbuf.h"
#include <stdio.h>
#include "utils/strbuf.h"
#include <stdio.h>
/*
/*
- * sdb_store_base_t represents the super-class of any object stored in the
+ * sdb_store_obj_t represents the super-class of any object stored in the
* database. It inherits from sdb_object_t and may safely be cast to a generic
* object to access its name.
*/
* database. It inherits from sdb_object_t and may safely be cast to a generic
* object to access its name.
*/
-struct sdb_store_base;
-typedef struct sdb_store_base sdb_store_base_t;
+struct sdb_store_obj;
+typedef struct sdb_store_obj sdb_store_obj_t;
/*
* sdb_store_clear:
/*
* sdb_store_clear:
_Bool
sdb_store_has_host(const char *name);
_Bool
sdb_store_has_host(const char *name);
-sdb_store_base_t *
+sdb_store_obj_t *
sdb_store_get_host(const char *name);
/*
sdb_store_get_host(const char *name);
/*
/*
* sdb_store_service:
/*
* sdb_store_service:
- * Add/update a store in the store. If the service, identified by its name,
+ * Add/update a service in the store. If the service, identified by its name,
* already exists for the specified host, it will be updated according to the
* specified 'service' object. If the referenced host does not exist, an error
* will be reported. Else, a new entry will be created in the store. Any
* already exists for the specified host, it will be updated according to the
* specified 'service' object. If the referenced host does not exist, an error
* will be reported. Else, a new entry will be created in the store. Any
sdb_store_service(const char *hostname, const char *name,
sdb_time_t last_update);
sdb_store_service(const char *hostname, const char *name,
sdb_time_t last_update);
+/*
+ * sdb_store_service_attr:
+ * Add/update a service's attribute in the store. If the attribute, identified
+ * by its key, already exists for the specified service, it will be updated to
+ * the specified value. If the references service (for the specified host)
+ * does not exist, an error will be reported. Any memory required for storing
+ * the entry will be allocated and managed by the store itself.
+ *
+ * Returns:
+ * - 0 on success
+ * - a positive value if the new entry is older than the currently stored
+ * entry (in this case, no update will happen)
+ * - a negative value on error
+ */
+int
+sdb_store_service_attr(const char *hostname, const char *service,
+ const char *key, const sdb_data_t *value, sdb_time_t last_update);
+
/*
* Conditionals may be used to lookup hosts from the store based on a
* conditional expression.
/*
* Conditionals may be used to lookup hosts from the store based on a
* conditional expression.
* - 0 else
*/
int
* - 0 else
*/
int
-sdb_store_matcher_matches(sdb_store_matcher_t *m, sdb_store_base_t *obj);
+sdb_store_matcher_matches(sdb_store_matcher_t *m, sdb_store_obj_t *obj);
/*
* sdb_store_matcher_tostring:
/*
* sdb_store_matcher_tostring:
* Lookup callback. It is called for each matching object when looking up data
* in the store. The lookup aborts if the callback returns non-zero.
*/
* Lookup callback. It is called for each matching object when looking up data
* in the store. The lookup aborts if the callback returns non-zero.
*/
-typedef int (*sdb_store_lookup_cb)(sdb_store_base_t *obj, void *user_data);
+typedef int (*sdb_store_lookup_cb)(sdb_store_obj_t *obj, void *user_data);
/*
* sdb_store_lookup:
/*
* sdb_store_lookup:
* - a negative value on error
*/
int
* - a negative value on error
*/
int
-sdb_store_host_tojson(sdb_store_base_t *host, sdb_strbuf_t *buf, int flags);
+sdb_store_host_tojson(sdb_store_obj_t *host, sdb_strbuf_t *buf, int flags);
/*
* sdb_store_iter_cb:
* Store iterator callback. Iteration stops if the callback returns non-zero.
*/
/*
* sdb_store_iter_cb:
* Store iterator callback. Iteration stops if the callback returns non-zero.
*/
-typedef int (*sdb_store_iter_cb)(sdb_store_base_t *obj, void *user_data);
+typedef int (*sdb_store_iter_cb)(sdb_store_obj_t *obj, void *user_data);
/*
* sdb_store_iterate:
/*
* sdb_store_iterate: