28 #ifndef LIBRPC_SERVICE_H 29 #define LIBRPC_SERVICE_H 46 #define __unsafe_unretained 55 #define RPC_FUNCTION_STILL_RUNNING ((rpc_object_t)1) 57 #define RPC_DISCOVERABLE_INTERFACE "com.twoporeguys.librpc.Discoverable" 58 #define RPC_INTROSPECTABLE_INTERFACE "com.twoporeguys.librpc.Introspectable" 59 #define RPC_OBSERVABLE_INTERFACE "com.twoporeguys.librpc.Observable" 60 #define RPC_DEFAULT_INTERFACE "com.twoporeguys.librpc.Default" 113 #define RPC_FUNCTION(_fn) \ 114 ^(void *_cookie, rpc_object_t _args) { \ 115 return ((rpc_object_t)_fn(_cookie, _args)); \ 118 #define RPC_PROPERTY_GETTER(_fn) \ 120 return ((rpc_object_t)_fn(_cookie)); \ 123 #define RPC_PROPERTY_SETTER(_fn) \ 124 ^(void *_cookie, rpc_object_t _value) { \ 125 _fn(_cookie, _value); \ 128 #define RPC_ABORT_HANDLER(_fn, _arg) \ 133 #define RPC_EVENT(_name) \ 135 .rim_type = RPC_MEMBER_EVENT, \ 136 .rim_name = (#_name) \ 142 #define RPC_PROPERTY_RO(_name, _getter) \ 144 .rim_type = RPC_MEMBER_PROPERTY, \ 145 .rim_name = (#_name), \ 147 .rp_getter = RPC_PROPERTY_GETTER(_getter), \ 156 #define RPC_PROPERTY_WO(_name, _setter) \ 158 .rim_type = RPC_MEMBER_PROPERTY, \ 159 .rim_name = (#_name), \ 162 .rp_setter = RPC_PROPERTY_SETTER(_setter), \ 170 #define RPC_PROPERTY_RW(_name, _getter, _setter) \ 172 .rim_type = RPC_MEMBER_PROPERTY, \ 173 .rim_name = (#_name), \ 175 .rp_getter = RPC_PROPERTY_GETTER(_getter), \ 176 .rp_setter = RPC_PROPERTY_SETTER(_setter), \ 184 #define RPC_METHOD(_name, _fn) \ 186 .rim_type = RPC_MEMBER_METHOD, \ 187 .rim_name = (#_name), \ 189 .rm_block = RPC_FUNCTION(_fn), \ 198 #define RPC_METHOD_BLOCK(_name, _block) \ 200 .rim_type = RPC_MEMBER_METHOD, \ 201 .rim_name = (#_name), \ 203 .rm_block = (_block), \ 207 #define RPC_MEMBER_END {} 235 void *_Nullable rm_arg;
245 void *_Nullable rp_arg;
255 const char *_Nonnull rim_name;
285 _Nonnull rpc_context_t context,
const char *_Nonnull path);
303 _Nonnull rpc_instance_t instance);
311 const char *_Nonnull path);
323 const char *_Nullable interface,
struct rpc_if_member *_Nonnull m);
336 const char *_Nullable interface,
const char *_Nonnull name,
350 const char *_Nullable interface,
const char *_Nonnull name,
361 const char *_Nullable interface,
const char *_Nonnull name);
395 const char *_Nonnull name, _Nullable
rpc_object_t args);
405 const char *_Nullable path,
const char *_Nullable interface,
488 const char *_Nonnull message, ...);
585 const char *_Nonnull fmt, ...);
595 const char *_Nonnull fmt, ...);
623 const char *_Nonnull interface,
624 const struct rpc_if_member *_Nullable vtable,
void *_Nullable arg);
634 const char *_Nonnull interface);
645 const char *_Nonnull interface,
658 const char *_Nonnull interface,
const char *_Nonnull name);
672 const char *_Nonnull interface,
const char *_Nonnull name,
686 const char *_Nonnull interface,
const char *_Nonnull name,
698 _Nonnull rpc_instance_t instance,
const char *_Nullable interface,
699 const char *_Nonnull name);
709 const char *_Nonnull interface);
718 const char *_Nonnull interface,
const char *_Nonnull name,
739 const char *_Nonnull interface,
const char *_Nonnull name,
753 const char *_Nonnull interface,
const char *_Nonnull name);
763 const char *_Nonnull interface,
const char *_Nonnull name);
780 const char *_Nonnull interface,
const char *_Nonnull name,
811 const char *_Nonnull fmt, ...);
void(^ rpc_property_setter_t)(void *_Nonnull cookie, _Nonnull rpc_object_t value)
void rpc_function_end(void *_Nonnull cookie)
struct rpc_object * rpc_object_t
int rpc_context_unregister_member(_Nonnull rpc_context_t context, const char *_Nullable interface, const char *_Nonnull name)
const char *_Nonnull rpc_function_get_interface(void *_Nonnull cookie)
void rpc_instance_set_description(_Nonnull rpc_instance_t instance, const char *_Nonnull fmt,...)
void rpc_property_error(void *_Nonnull cookie, int code, const char *_Nonnull fmt,...)
void rpc_function_kill(void *_Nonnull cookie)
_Nullable rpc_object_t(* rpc_function_f)(void *_Nonnull cookie, _Nonnull rpc_object_t args)
int rpc_function_start_stream(void *_Nonnull cookie)
void rpc_function_error_ex(void *_Nonnull cookie, _Nonnull rpc_object_t exception)
int rpc_context_register_instance(_Nonnull rpc_context_t context, _Nonnull rpc_instance_t instance)
void rpc_context_unregister_instance(_Nonnull rpc_context_t context, const char *_Nonnull path)
struct rpc_instance * rpc_instance_t
void rpc_instance_free(_Nonnull rpc_instance_t instance)
void(^ rpc_abort_handler_t)(void)
_Nullable rpc_instance_t rpc_instance_new(void *_Nullable arg, const char *_Nonnull fmt,...)
void rpc_function_set_async_abort_handler(void *_Nonnull cookie, _Nullable rpc_abort_handler_t handler)
const char *_Nonnull rpc_instance_get_path(_Nonnull rpc_instance_t instance)
struct rpc_connection * rpc_connection_t
void rpc_instance_emit_event(_Nonnull rpc_instance_t instance, const char *_Nonnull interface, const char *_Nonnull name, _Nonnull rpc_object_t args)
void rpc_function_error(void *_Nonnull cookie, int code, const char *_Nonnull message,...)
int rpc_instance_unregister_member(_Nonnull rpc_instance_t instance, const char *_Nonnull interface, const char *_Nonnull name)
int rpc_function_release(void *_Nonnull cookie)
int rpc_function_retain(void *_Nonnull cookie)
_Nullable rpc_call_t rpc_context_dispatch_call(_Nonnull rpc_context_t context, const char *_Nonnull name, _Nullable rpc_object_t args)
int rpc_instance_register_block(_Nonnull rpc_instance_t instance, const char *_Nonnull interface, const char *_Nonnull name, void *_Nullable arg, _Nonnull rpc_function_t fn)
struct rpc_context * rpc_context_t
_Nonnull rpc_instance_t rpc_property_get_instance(void *_Nonnull cookie)
void rpc_context_set_post_call_hook(_Nonnull rpc_context_t context, _Nonnull rpc_function_t fn)
_Nullable rpc_object_t(^ rpc_function_t)(void *_Nonnull cookie, _Nonnull rpc_object_t args)
int rpc_instance_register_property(_Nonnull rpc_instance_t instance, const char *_Nonnull interface, const char *_Nonnull name, void *_Nullable arg, _Nullable rpc_property_getter_t getter, _Nullable rpc_property_setter_t setter)
void *_Nullable rpc_instance_get_arg(_Nonnull rpc_instance_t instance)
bool rpc_instance_has_interface(_Nonnull rpc_instance_t instance, const char *_Nonnull interface)
void rpc_instance_unregister_interface(_Nonnull rpc_instance_t instance, const char *_Nonnull interface)
struct rpc_call * rpc_call_t
const char *_Nonnull rpc_function_get_name(void *_Nonnull cookie)
_Nonnull rpc_context_t rpc_context_create(void)
_Nonnull rpc_instance_t rpc_function_get_instance(void *_Nonnull cookie)
bool rpc_function_should_abort(void *_Nonnull cookie)
const char *_Nonnull rpc_function_get_path(void *_Nonnull cookie)
void *_Nullable rpc_function_get_arg(void *_Nonnull cookie)
void rpc_instance_property_changed(_Nonnull rpc_instance_t instance, const char *_Nonnull interface, const char *_Nonnull name, _Nullable rpc_object_t value)
void rpc_context_emit_event(_Nonnull rpc_context_t context, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name, _Nonnull rpc_object_t args)
_Nonnull rpc_instance_t rpc_context_get_root(_Nonnull rpc_context_t context)
int rpc_context_register_func(_Nonnull rpc_context_t context, const char *_Nullable interface, const char *_Nonnull name, void *_Nullable arg, _Nonnull rpc_function_f func)
void rpc_function_respond(void *_Nonnull cookie, _Nullable rpc_object_t object)
void *_Nullable rpc_property_get_arg(void *_Nonnull cookie)
void rpc_context_set_pre_call_hook(_Nonnull rpc_context_t context, _Nonnull rpc_function_t fn)
_Nullable rpc_object_t(^ rpc_property_getter_t)(void *_Nonnull cookie)
int rpc_instance_register_func(_Nonnull rpc_instance_t instance, const char *_Nonnull interface, const char *_Nonnull name, void *_Nullable arg, _Nonnull rpc_function_f fn)
int rpc_context_register_member(_Nonnull rpc_context_t context, const char *_Nullable interface, struct rpc_if_member *_Nonnull m)
int rpc_instance_register_interface(_Nonnull rpc_instance_t instance, const char *_Nonnull interface, const struct rpc_if_member *_Nullable vtable, void *_Nullable arg)
int rpc_function_yield(void *_Nonnull cookie, _Nonnull rpc_object_t fragment)
int rpc_instance_register_event(_Nonnull rpc_instance_t instance, const char *_Nonnull interface, const char *_Nonnull name)
int rpc_instance_get_property_rights(_Nonnull rpc_instance_t instance, const char *_Nonnull interface, const char *_Nonnull name)
int rpc_instance_register_member(_Nonnull rpc_instance_t instance, const char *_Nonnull interface, const struct rpc_if_member *_Nonnull member)
_Nullable rpc_connection_t rpc_function_get_connection(void *_Nonnull cookie)
int rpc_context_register_block(_Nonnull rpc_context_t context, const char *_Nullable interface, const char *_Nonnull name, void *_Nullable arg, _Nonnull rpc_function_t func)
_Nullable rpc_instance_t rpc_context_find_instance(_Nonnull rpc_context_t context, const char *_Nonnull path)
void rpc_context_free(_Nonnull rpc_context_t context)
_Nonnull rpc_context_t rpc_function_get_context(void *_Nonnull cookie)
struct rpc_if_member *_Nullable rpc_instance_find_member(_Nonnull rpc_instance_t instance, const char *_Nullable interface, const char *_Nonnull name)