44 lines
948 B
C
44 lines
948 B
C
|
#pragma once
|
||
|
|
||
|
#include "rpc.h"
|
||
|
|
||
|
struct rpc_op_t;
|
||
|
|
||
|
// Handler should return 1 if the request is processed asynchronously
|
||
|
// and requires the incoming message to not be freed until processing ends,
|
||
|
// 0 otherwise.
|
||
|
typedef int (*rpc_handler_t)(void *opaque, rpc_op_t *rop);
|
||
|
|
||
|
struct rpc_service_proc_t
|
||
|
{
|
||
|
uint32_t prog;
|
||
|
uint32_t vers;
|
||
|
uint32_t proc;
|
||
|
rpc_handler_t handler_fn;
|
||
|
xdrproc_t req_fn;
|
||
|
uint32_t req_size;
|
||
|
xdrproc_t resp_fn;
|
||
|
uint32_t resp_size;
|
||
|
void *opaque;
|
||
|
};
|
||
|
|
||
|
inline bool operator < (const rpc_service_proc_t & a, const rpc_service_proc_t & b)
|
||
|
{
|
||
|
return a.prog < b.prog || a.prog == b.prog && (a.vers < b.vers || a.vers == b.vers && a.proc < b.proc);
|
||
|
}
|
||
|
|
||
|
struct rpc_op_t
|
||
|
{
|
||
|
void *client;
|
||
|
uint8_t *buffer;
|
||
|
XDR *xdrs;
|
||
|
rpc_msg in_msg, out_msg;
|
||
|
void *request;
|
||
|
void *reply;
|
||
|
xdrproc_t reply_fn;
|
||
|
uint32_t reply_marker;
|
||
|
bool referenced;
|
||
|
};
|
||
|
|
||
|
void rpc_queue_reply(rpc_op_t *rop);
|