feat(core): add versioned fake-session C ABI
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user