85 lines
2.5 KiB
C
85 lines
2.5 KiB
C
#ifndef AMDUAT_FED_REGISTRY_H
|
|
#define AMDUAT_FED_REGISTRY_H
|
|
|
|
#include "amduat/asl/core.h"
|
|
#include "amduat/asl/store.h"
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct {
|
|
uint32_t domain_id;
|
|
uint64_t snapshot_id;
|
|
uint64_t log_prefix;
|
|
uint64_t last_logseq;
|
|
uint8_t admitted;
|
|
uint8_t policy_ok;
|
|
uint8_t reserved[6];
|
|
amduat_hash_id_t policy_hash_id;
|
|
amduat_octets_t policy_hash; /* Empty when unknown; caller-owned bytes. */
|
|
} amduat_fed_domain_state_t;
|
|
|
|
typedef struct {
|
|
amduat_fed_domain_state_t *states;
|
|
size_t len;
|
|
size_t cap;
|
|
bool owns_states;
|
|
} amduat_fed_registry_value_t;
|
|
|
|
void amduat_fed_registry_value_init(amduat_fed_registry_value_t *value,
|
|
amduat_fed_domain_state_t *states,
|
|
size_t cap);
|
|
|
|
bool amduat_fed_registry_value_insert(amduat_fed_registry_value_t *value,
|
|
amduat_fed_domain_state_t state);
|
|
|
|
const amduat_fed_domain_state_t *amduat_fed_registry_value_lookup(
|
|
const amduat_fed_registry_value_t *value,
|
|
uint32_t domain_id);
|
|
|
|
void amduat_fed_registry_value_free(amduat_fed_registry_value_t *value);
|
|
|
|
/* Encode/Decode allocate buffers; caller frees via amduat_octets_free. */
|
|
bool amduat_fed_registry_encode(const amduat_fed_registry_value_t *value,
|
|
amduat_octets_t *out_bytes);
|
|
|
|
/* Decode allocates policy_hash bytes; free via amduat_fed_registry_value_free. */
|
|
bool amduat_fed_registry_decode(amduat_octets_t bytes,
|
|
amduat_fed_registry_value_t *out_value);
|
|
|
|
typedef enum {
|
|
AMDUAT_FED_REGISTRY_OK = 0,
|
|
AMDUAT_FED_REGISTRY_ERR_CODEC = 1,
|
|
AMDUAT_FED_REGISTRY_ERR_STORE = 2
|
|
} amduat_fed_registry_error_t;
|
|
|
|
typedef struct {
|
|
amduat_asl_store_t *store;
|
|
} amduat_fed_registry_store_t;
|
|
|
|
void amduat_fed_registry_store_init(amduat_fed_registry_store_t *reg,
|
|
amduat_asl_store_t *store);
|
|
|
|
amduat_fed_registry_error_t amduat_fed_registry_store_put(
|
|
amduat_fed_registry_store_t *reg,
|
|
const amduat_fed_registry_value_t *value,
|
|
amduat_reference_t *out_ref,
|
|
amduat_asl_store_error_t *out_store_err);
|
|
|
|
amduat_fed_registry_error_t amduat_fed_registry_store_get(
|
|
amduat_fed_registry_store_t *reg,
|
|
amduat_reference_t ref,
|
|
amduat_fed_registry_value_t *out_value,
|
|
amduat_asl_store_error_t *out_store_err);
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* AMDUAT_FED_REGISTRY_H */
|