96 lines
2.6 KiB
C
96 lines
2.6 KiB
C
#ifndef AMDUAT_FED_COORD_H
|
|
#define AMDUAT_FED_COORD_H
|
|
|
|
#include "amduat/asl/core.h"
|
|
#include "amduat/asl/store.h"
|
|
#include "amduat/fed/registry.h"
|
|
#include "amduat/fed/view.h"
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct amduat_fed_coord amduat_fed_coord_t;
|
|
|
|
typedef enum {
|
|
AMDUAT_FED_COORD_OK = 0,
|
|
AMDUAT_FED_COORD_ERR_INVALID = 1,
|
|
AMDUAT_FED_COORD_ERR_OOM = 2,
|
|
AMDUAT_FED_COORD_ERR_STORE = 3,
|
|
AMDUAT_FED_COORD_ERR_CODEC = 4,
|
|
AMDUAT_FED_COORD_ERR_NOT_IMPLEMENTED = 5
|
|
} amduat_fed_coord_error_t;
|
|
|
|
typedef struct {
|
|
void *ctx;
|
|
int (*get_records)(void *ctx,
|
|
uint32_t domain_id,
|
|
uint64_t snapshot_id,
|
|
uint64_t log_prefix,
|
|
uint64_t from_logseq,
|
|
amduat_fed_record_t **out_records,
|
|
size_t *out_len);
|
|
void (*free_records)(void *ctx, amduat_fed_record_t *records, size_t len);
|
|
int (*get_artifact)(void *ctx,
|
|
amduat_reference_t ref,
|
|
amduat_octets_t *out_bytes);
|
|
} amduat_fed_transport_t;
|
|
|
|
typedef struct {
|
|
void *ctx;
|
|
bool (*record_allowed)(void *ctx,
|
|
const amduat_fed_record_t *record,
|
|
amduat_fed_policy_deny_t *out_deny);
|
|
} amduat_fed_policy_hooks_t;
|
|
|
|
typedef struct {
|
|
uint32_t local_domain_id;
|
|
amduat_asl_store_t *authoritative_store;
|
|
amduat_asl_store_t *cache_store;
|
|
amduat_reference_t registry_ref;
|
|
amduat_fed_transport_t transport;
|
|
amduat_fed_policy_hooks_t policy_hooks;
|
|
} amduat_fed_coord_cfg_t;
|
|
|
|
typedef struct {
|
|
uint32_t domain_id;
|
|
amduat_reference_t registry_ref;
|
|
uint64_t last_tick_ms;
|
|
} amduat_fed_coord_status_t;
|
|
|
|
amduat_fed_coord_error_t amduat_fed_coord_open(
|
|
const amduat_fed_coord_cfg_t *cfg,
|
|
amduat_fed_coord_t **out_coord);
|
|
|
|
amduat_fed_coord_error_t amduat_fed_coord_close(amduat_fed_coord_t *coord);
|
|
|
|
amduat_fed_coord_error_t amduat_fed_coord_load_registry(
|
|
amduat_fed_coord_t *coord);
|
|
|
|
amduat_fed_coord_error_t amduat_fed_coord_set_admitted(
|
|
amduat_fed_coord_t *coord,
|
|
uint32_t domain_id,
|
|
bool admitted);
|
|
|
|
amduat_fed_coord_error_t amduat_fed_coord_tick(
|
|
amduat_fed_coord_t *coord,
|
|
uint64_t now_ms);
|
|
|
|
amduat_fed_coord_error_t amduat_fed_coord_resolve(
|
|
amduat_fed_coord_t *coord,
|
|
amduat_reference_t ref,
|
|
amduat_artifact_t *out_artifact);
|
|
|
|
void amduat_fed_coord_get_status(const amduat_fed_coord_t *coord,
|
|
amduat_fed_coord_status_t *out_status);
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* AMDUAT_FED_COORD_H */
|