#ifndef NET_ORG_H
#define NET_ORG_H
#include <stdint.h>
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
#define NET_ORG_ABI_VERSION 0x0001
uint32_t net_org_abi_version(void);
int net_org_check_abi_version(uint32_t expected);
#define NET_ORG_OK 0
#define NET_ORG_ERR_NULL -1
#define NET_ORG_ERR_INVALID_UTF8 -2
#define NET_ORG_ERR_CREDENTIALS -3
#define NET_ORG_ERR_DISCOVERY -4
#define NET_ORG_ERR_ADMISSION_DENIED -5
#define NET_ORG_ERR_RPC -6
#define NET_ORG_ERR_CLOSED -7
#define NET_ORG_ERR_UNCLASSIFIED -8
#define NET_ORG_ERR_NO_DISPATCHER -9
#define NET_ORG_ERR_ALREADY_SERVING -10
#define NET_ORG_ERR_SERVE -11
#define NET_ORG_ERR_PROVISION -12
#define NET_ORG_ERR_SUBNET -13
#define NET_ORG_ACCESS_SAME_ORG 0
#define NET_ORG_ACCESS_GRANTED 1
typedef struct NetOrgCredentials NetOrgCredentials;
typedef struct NetOrgClient NetOrgClient;
typedef struct NetOrgServeHandle NetOrgServeHandle;
typedef struct net_compute_mesh_arc_t net_compute_mesh_arc_t;
typedef struct {
uint8_t caller[32];
uint8_t acting_org[32];
uint8_t provider_org[32];
uint8_t provider[32];
uint8_t capability[32];
} net_org_caller_t;
void net_org_free_cstring(char* s);
void net_org_response_free(uint8_t* ptr, size_t len);
int net_org_credentials_new(
const uint8_t* membership_ptr, size_t membership_len,
const uint8_t* dispatcher_ptr, size_t dispatcher_len,
const uint8_t* const* grant_ptrs, const size_t* grant_lens, size_t grant_count,
const char* const* audience_secret_paths, size_t audience_secret_count,
NetOrgCredentials** out_creds, char** out_err);
void net_org_credentials_free(NetOrgCredentials** credentials);
int net_org_bind(net_compute_mesh_arc_t* mesh_arc,
NetOrgCredentials** credentials,
NetOrgClient** out_client, char** out_err);
void net_org_client_free(NetOrgClient** client);
int net_org_call(NetOrgClient* client,
const char* service_ptr, size_t service_len,
const uint8_t* req_ptr, size_t req_len,
uint64_t deadline_ms, uint64_t cancel_token,
uint8_t** out_resp_ptr, size_t* out_resp_len, char** out_err);
int net_org_call_exported(NetOrgClient* client,
const char* service_ptr, size_t service_len,
const uint8_t* req_ptr, size_t req_len,
uint64_t deadline_ms, uint64_t cancel_token,
uint8_t** out_resp_ptr, size_t* out_resp_len, char** out_err);
uint64_t net_org_reserve_cancel_token(NetOrgClient* client);
int net_org_cancel_call(NetOrgClient* client, uint64_t cancel_token);
typedef int (*NetOrgHandlerFn)(
uint64_t handler_id, const net_org_caller_t* caller,
const uint8_t* req_ptr, size_t req_len,
uint8_t** out_resp_ptr, size_t* out_resp_len, char** out_err);
void net_org_set_handler_dispatcher(NetOrgHandlerFn dispatcher);
uint64_t net_org_reserve_handler_id(void);
int net_org_serve(net_compute_mesh_arc_t* mesh_arc,
const char* service_ptr, size_t service_len,
int access, uint64_t handler_id,
NetOrgServeHandle** out_handle, char** out_err);
uint64_t net_org_serve_handle_id(const NetOrgServeHandle* handle);
void net_org_serve_handle_close(NetOrgServeHandle* handle);
void net_org_serve_handle_free(NetOrgServeHandle** handle);
int net_org_install_authority(net_compute_mesh_arc_t* mesh_arc,
const char* dir_ptr, size_t dir_len,
char** out_err);
int net_org_install_provider_grant_audience(
net_compute_mesh_arc_t* mesh_arc,
const uint8_t* grant_ptr, size_t grant_len,
const char* secret_path_ptr, size_t secret_path_len,
char** out_err);
#ifdef __cplusplus
}
#endif
#endif