#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 #include #include #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 */