27#include "xtc_export.h"
43#define XTC_SVR_CONTINUE 0
45#define XTC_SVR_NOREPLY 2
47typedef struct xtc_svr xtc_svr_t;
48typedef struct xtc_svr_call xtc_svr_call_t;
50typedef struct xtc_svr_callbacks {
52 int (*init) (
void *state);
53 int (*handle_call) (
void *state,
const void *req,
size_t req_size,
54 xtc_svr_call_t *call);
55 int (*handle_cast) (
void *state,
const void *msg,
size_t size);
56 int (*handle_info) (
void *state,
const void *msg,
size_t size);
64 void (*terminate) (
void *state,
int reason);
65 int (*handle_continue)(
void *state,
void *cont);
70#define XTC_SVR_CALLBACKS_INIT { .size = sizeof(xtc_svr_callbacks_t) }
72typedef struct xtc_svr_opts {
78#define XTC_SVR_OPTS_INIT { .size = sizeof(xtc_svr_opts_t) }
94XTC_API
int xtc_svr_start(xtc_loop_t *loop,
100XTC_API
int xtc_svr_stop(xtc_svr_t *svr);
101XTC_API
int xtc_svr_join(xtc_svr_t *svr, int64_t timeout_ns);
102XTC_API
xtc_pid_t xtc_svr_pid(
const xtc_svr_t *svr);
119XTC_API
int xtc_svr_call(
xtc_pid_t target,
120 const void *req,
size_t req_size,
121 void **out_reply,
size_t *out_size,
132XTC_API
int xtc_svr_call_abortable(
xtc_pid_t target,
133 const void *req,
size_t req_size,
134 void **out_reply,
size_t *out_size,
135 int64_t timeout_ns, xtc_abort_token_t *tok);
139XTC_API
int xtc_svr_cast(
xtc_pid_t target,
const void *msg,
size_t size);
143XTC_API
int xtc_svr_reply(xtc_svr_call_t *call,
144 const void *reply,
size_t size);
154XTC_API
int xtc_svr_continue(
void *cont);
173XTC_API xtc_svr_call_t *xtc_svr_call_save(
const xtc_svr_call_t *call);