feat(core): add versioned fake-session C ABI

This commit is contained in:
sechmachine
2026-08-12 15:08:09 +07:00
parent cb94f4ad5d
commit 67510b65b4
5 changed files with 1754 additions and 1 deletions
+175
View File
@@ -0,0 +1,175 @@
#ifndef VERSEVDI_CORE_H
#define VERSEVDI_CORE_H
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define VERSE_CORE_ABI_VERSION_1 UINT32_C(1)
typedef uint32_t verse_status_t;
#define VERSE_STATUS_OK UINT32_C(0)
#define VERSE_STATUS_INVALID_ARGUMENT UINT32_C(1)
#define VERSE_STATUS_INVALID_STATE UINT32_C(2)
#define VERSE_STATUS_UNSUPPORTED_ABI UINT32_C(3)
#define VERSE_STATUS_AUTHORITY_REJECTED UINT32_C(4)
#define VERSE_STATUS_TLS UINT32_C(5)
#define VERSE_STATUS_TRANSPORT UINT32_C(6)
#define VERSE_STATUS_PROTOCOL UINT32_C(7)
#define VERSE_STATUS_EXPIRED UINT32_C(8)
#define VERSE_STATUS_QUEUE_FULL UINT32_C(9)
#define VERSE_STATUS_CANCELLED UINT32_C(10)
#define VERSE_STATUS_REENTRANT UINT32_C(11)
#define VERSE_STATUS_BUSY UINT32_C(12)
#define VERSE_STATUS_INTERNAL UINT32_C(13)
#define VERSE_STATE_CONNECTING UINT32_C(1)
#define VERSE_STATE_CONNECTED UINT32_C(2)
#define VERSE_STATE_CANCELLED UINT32_C(3)
#define VERSE_INPUT_KEYBOARD UINT32_C(1)
#define VERSE_INPUT_MOUSE_BUTTON UINT32_C(2)
#define VERSE_INPUT_RELATIVE_MOUSE UINT32_C(3)
#define VERSE_INPUT_TEXT UINT32_C(4)
#define VERSE_INPUT_CONTROLLER UINT32_C(5)
#define VERSE_INPUT_ABSOLUTE_MOUSE UINT32_C(6)
#define VERSE_INPUT_SCROLL UINT32_C(7)
typedef struct verse_core verse_core_t;
typedef struct verse_bytes_view {
const uint8_t *data;
size_t length;
} verse_bytes_view_t;
typedef struct verse_state_event_v1 {
uint32_t struct_size;
uint32_t abi_version;
uint32_t state;
uint32_t reason;
} verse_state_event_v1_t;
typedef struct verse_error_event_v1 {
uint32_t struct_size;
uint32_t abi_version;
uint32_t code;
uint32_t retryable;
uint32_t phase;
uint32_t reserved;
} verse_error_event_v1_t;
typedef struct verse_stats_event_v1 {
uint32_t struct_size;
uint32_t abi_version;
uint64_t dropped_callbacks;
uint64_t dropped_media_units;
uint64_t dropped_input_events;
} verse_stats_event_v1_t;
typedef struct verse_media_event_v1 {
uint32_t struct_size;
uint32_t abi_version;
uint32_t channel;
uint32_t sequence;
uint64_t timestamp_ms;
verse_bytes_view_t encoded_unit;
} verse_media_event_v1_t;
typedef struct verse_control_event_v1 {
uint32_t struct_size;
uint32_t abi_version;
uint32_t kind;
uint32_t reserved;
verse_bytes_view_t payload;
} verse_control_event_v1_t;
typedef verse_status_t (*verse_sign_admission_v1_fn)(
void *signer_context,
verse_bytes_view_t transcript,
uint8_t signature_out[64]);
typedef verse_status_t (*verse_sign_tls_ed25519_v1_fn)(
void *signer_context,
verse_bytes_view_t tls_message,
uint8_t signature_out[64]);
typedef void (*verse_state_event_v1_fn)(
void *context,
const verse_state_event_v1_t *event);
typedef void (*verse_error_event_v1_fn)(
void *context,
const verse_error_event_v1_t *event);
typedef void (*verse_stats_event_v1_fn)(
void *context,
const verse_stats_event_v1_t *event);
typedef void (*verse_media_event_v1_fn)(
void *context,
const verse_media_event_v1_t *event);
typedef void (*verse_control_event_v1_fn)(
void *context,
const verse_control_event_v1_t *event);
typedef struct verse_core_config_v1 {
uint32_t struct_size;
uint32_t abi_version;
void *context;
verse_sign_admission_v1_fn sign_admission;
verse_sign_tls_ed25519_v1_fn sign_tls_ed25519;
verse_state_event_v1_fn on_state;
verse_error_event_v1_fn on_error;
verse_stats_event_v1_fn on_stats;
verse_media_event_v1_fn on_media;
verse_control_event_v1_fn on_control;
} verse_core_config_v1_t;
typedef struct verse_connect_request_v1 {
uint32_t struct_size;
uint32_t abi_version;
verse_bytes_view_t manifest_json;
verse_bytes_view_t tunnel_credential_json;
} verse_connect_request_v1_t;
/* values are kind-specific signed fields; every unused field and flags must be zero. */
typedef struct verse_input_event_v1 {
uint32_t struct_size;
uint32_t abi_version;
uint32_t kind;
uint32_t flags;
int32_t values[12];
} verse_input_event_v1_t;
uint32_t verse_core_abi_version(void);
verse_status_t verse_core_create_v1(
const verse_core_config_v1_t *config,
verse_core_t **out_core);
verse_status_t verse_core_connect_v1(
verse_core_t *core,
const verse_connect_request_v1_t *request);
verse_status_t verse_core_send_input_v1(
verse_core_t *core,
const verse_input_event_v1_t *event);
verse_status_t verse_core_request_idr_v1(verse_core_t *core);
verse_status_t verse_core_cancel_v1(verse_core_t *core);
verse_status_t verse_core_destroy_v1(verse_core_t *core, uint32_t timeout_ms);
#if defined(__APPLE__) && defined(__aarch64__)
_Static_assert(sizeof(verse_bytes_view_t) == 16, "verse_bytes_view_t arm64 layout");
_Static_assert(sizeof(verse_core_config_v1_t) == 72, "verse_core_config_v1_t arm64 layout");
_Static_assert(offsetof(verse_core_config_v1_t, sign_admission) == 16, "config callback offset");
_Static_assert(sizeof(verse_connect_request_v1_t) == 40, "verse_connect_request_v1_t arm64 layout");
_Static_assert(offsetof(verse_connect_request_v1_t, manifest_json) == 8, "request view offset");
_Static_assert(sizeof(verse_input_event_v1_t) == 64, "verse_input_event_v1_t arm64 layout");
_Static_assert(sizeof(verse_state_event_v1_t) == 16, "verse_state_event_v1_t arm64 layout");
_Static_assert(sizeof(verse_error_event_v1_t) == 24, "verse_error_event_v1_t arm64 layout");
_Static_assert(sizeof(verse_stats_event_v1_t) == 32, "verse_stats_event_v1_t arm64 layout");
_Static_assert(sizeof(verse_media_event_v1_t) == 40, "verse_media_event_v1_t arm64 layout");
_Static_assert(sizeof(verse_control_event_v1_t) == 32, "verse_control_event_v1_t arm64 layout");
#endif
#ifdef __cplusplus
}
#endif
#endif