amduat/include/amduat/fed/view.h
2026-01-18 12:03:18 +01:00

73 lines
1.7 KiB
C

#ifndef AMDUAT_FED_VIEW_H
#define AMDUAT_FED_VIEW_H
#include "amduat/asl/store.h"
#include "amduat/fed/replay.h"
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
AMDUAT_FED_RESOLVE_OK = 0,
AMDUAT_FED_RESOLVE_NOT_FOUND = 1,
AMDUAT_FED_RESOLVE_FOUND_REMOTE_NO_BYTES = 2,
AMDUAT_FED_RESOLVE_INTEGRITY_ERROR = 3,
AMDUAT_FED_RESOLVE_POLICY_DENIED = 4,
AMDUAT_FED_RESOLVE_STORE_ERROR = 5
} amduat_fed_resolve_error_t;
typedef struct {
uint32_t domain_id;
uint64_t snapshot_id;
uint64_t log_prefix;
} amduat_fed_view_bounds_t;
typedef struct {
amduat_fed_record_id_t id;
uint32_t reason_code;
} amduat_fed_policy_deny_t;
typedef struct {
uint32_t local_domain_id;
amduat_fed_record_t *records;
size_t len;
amduat_fed_policy_deny_t *denies;
size_t denies_len;
} amduat_fed_view_t;
typedef enum {
AMDUAT_FED_VIEW_OK = 0,
AMDUAT_FED_VIEW_ERR_INVALID = 1,
AMDUAT_FED_VIEW_ERR_CONFLICT = 2,
AMDUAT_FED_VIEW_ERR_OOM = 3
} amduat_fed_view_error_t;
/* Caller frees records/denies with amduat_fed_view_free. */
amduat_fed_view_error_t amduat_fed_view_build(
const amduat_fed_record_t *records,
size_t count,
uint32_t local_domain_id,
const amduat_fed_view_bounds_t *bounds,
size_t bounds_len,
const amduat_fed_policy_deny_t *denies,
size_t denies_len,
amduat_fed_view_t *out_view);
void amduat_fed_view_free(amduat_fed_view_t *view);
amduat_fed_resolve_error_t amduat_fed_resolve(
const amduat_fed_view_t *view,
amduat_asl_store_t *local_store,
amduat_reference_t ref,
amduat_artifact_t *out_artifact);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* AMDUAT_FED_VIEW_H */