28 #ifndef LIBRPC_CONNECTION_H 29 #define LIBRPC_CONNECTION_H 33 #include <rpc/config.h> 35 #ifdef ENABLE_LIBDISPATCH 36 #include <dispatch/dispatch.h> 50 struct rpc_connection;
105 const char *_Nullable interface,
const char *_Nonnull name,
123 const int *_Nullable fds,
size_t nfds);
133 #define RPC_HANDLER(_fn, _arg) \ 134 ^(const char *_path, const char *_iface, const char *_name, \ 135 rpc_object_t _args) { \ 136 _fn(_arg, _path, _iface, _name, _args); \ 142 #define RPC_PROPERTY_HANDLER(_fn, _arg) \ 143 ^(rpc_object_t _value) { \ 150 #define RPC_ERROR_HANDLER(_fn, _arg) \ 151 ^(rpc_error_code_t _code, rpc_object_t _args) { \ 152 _fn(_arg, _code, _args); \ 158 #define RPC_RAW_HANDLER(_fn, _arg) \ 159 ^(const void *_msg, size_t _len, const int *_fds, size_t _nfd) {\ 160 return (_fn(_arg, _msg, _len, _fds, _nfd)); \ 166 #define RPC_CALLBACK(_fn, _arg) \ 167 ^(rpc_object_t _args, rpc_call_status_t _status) { \ 168 return ((bool)_fn(_arg, _args, _status)); \ 174 #define RPC_NULL_FORMAT "[]" 201 _Nonnull rpc_connection_t conn);
215 struct rpc_context *_Nonnull ctx);
258 #ifdef ENABLE_LIBDISPATCH 270 int rpc_connection_set_dispatch_queue(_Nonnull rpc_connection_t conn,
271 _Nonnull dispatch_queue_t queue);
289 const char *_Nullable path,
const char *_Nullable interface,
290 const char *_Nonnull name);
305 const char *_Nullable path,
const char *_Nullable interface,
306 const char *_Nonnull name);
325 _Nonnull rpc_connection_t conn,
const char *_Nullable path,
326 const char *_Nullable interface,
const char *_Nonnull name,
342 void *_Nonnull cookie);
359 const char *_Nullable path,
const char *_Nullable interface,
360 const char *_Nonnull method, ...);
378 const char *_Nullable path,
const char *_Nullable interface,
379 const char *_Nonnull method, va_list ap);
396 const char *_Nullable path,
const char *_Nullable interface,
397 const char *_Nonnull method,
const char *_Nonnull fmt, ...);
412 _Nonnull rpc_connection_t conn,
const char *_Nullable path,
413 const char *_Nullable interface,
const char *_Nonnull method,
414 const char *_Nonnull fmt, va_list ap);
433 _Nonnull rpc_connection_t conn,
const char *_Nonnull name,
434 const char *_Nonnull fmt, ...);
453 const char *_Nullable path,
const char *_Nullable interface,
466 _Nonnull rpc_connection_t conn,
const char *_Nullable path,
467 const char *_Nullable interface,
const char *_Nonnull name);
479 _Nonnull rpc_connection_t conn,
const char *_Nullable path,
480 const char *_Nullable interface,
const char *_Nonnull name,
495 _Nonnull rpc_connection_t conn,
const char *_Nullable path,
496 const char *_Nullable interface,
const char *_Nonnull name,
497 const char *_Nonnull fmt, ...);
510 _Nonnull rpc_connection_t conn,
const char *_Nullable path,
511 const char *_Nullable interface,
const char *_Nonnull name,
512 const char *_Nonnull fmt, va_list ap);
524 _Nonnull rpc_connection_t conn,
const char *_Nullable path,
525 const char *_Nullable interface,
const char *_Nonnull property,
537 const char *_Nullable path,
const char *_Nullable interface,
555 const void *_Nonnull msg,
size_t len,
const int *_Nullable fds,
591 _Nonnull rpc_connection_t conn);
688 const struct timespec *_Nonnull ts);
int rpc_call_timedwait(_Nonnull rpc_call_t call, const struct timespec *_Nonnull ts)
enum rpc_call_status rpc_call_status_t
struct rpc_object * rpc_object_t
int rpc_connection_set_context(_Nonnull rpc_connection_t conn, struct rpc_context *_Nonnull ctx)
_Nullable rpc_object_t rpc_connection_call_syncv(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull method, va_list ap)
void *_Nullable rpc_connection_watch_property(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull property, _Nonnull rpc_property_handler_t handler)
bool rpc_connection_is_valid(_Nonnull rpc_connection_t conn)
bool rpc_connection_supports_credentials(_Nonnull rpc_connection_t conn)
int rpc_connection_ping(_Nonnull rpc_connection_t conn)
int rpc_call_wait(_Nonnull rpc_call_t call)
int(^ rpc_raw_handler_t)(const void *_Nonnull msg, size_t len, const int *_Nullable fds, size_t nfds)
_Nullable rpc_connection_t rpc_connection_create(void *_Nonnull cookie, _Nullable rpc_object_t params)
_Nullable rpc_object_t rpc_connection_call_syncp(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull method, const char *_Nonnull fmt,...)
void rpc_connection_set_error_handler(_Nonnull rpc_connection_t conn, _Nullable rpc_error_handler_t handler)
int rpc_connection_send_event(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name, _Nonnull rpc_object_t args)
_Nullable rpc_call_t rpc_connection_call(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name, _Nullable rpc_object_t args, _Nullable rpc_callback_t callback)
void rpc_connection_set_raw_message_handler(_Nonnull rpc_connection_t conn, _Nullable rpc_raw_handler_t handler)
struct rpc_context *_Nullable rpc_connection_get_context(_Nonnull rpc_connection_t conn)
int rpc_connection_send_raw_message(_Nonnull rpc_connection_t conn, const void *_Nonnull msg, size_t len, const int *_Nullable fds, size_t nfds)
const char *_Nullable rpc_connection_get_remote_address(_Nonnull rpc_connection_t conn)
struct rpc_connection * rpc_connection_t
_Nullable rpc_object_t rpc_connection_call_simple(_Nonnull rpc_connection_t conn, const char *_Nonnull name, const char *_Nonnull fmt,...)
_Nullable rpc_object_t rpc_connection_call_sync(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull method,...)
int rpc_call_success(_Nonnull rpc_call_t call)
void rpc_connection_free(_Nonnull rpc_connection_t conn)
bool(^ rpc_callback_t)(_Nonnull rpc_call_t call)
bool rpc_connection_supports_fd_passing(_Nonnull rpc_connection_t conn)
int rpc_connection_get_fd(_Nonnull rpc_connection_t conn)
_Nullable rpc_object_t rpc_call_result(_Nonnull rpc_call_t call)
bool rpc_connection_is_open(_Nonnull rpc_connection_t conn)
int rpc_connection_unregister_event_handler(_Nonnull rpc_connection_t conn, void *_Nonnull cookie)
int rpc_connection_unsubscribe_event(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name)
gid_t rpc_connection_get_remote_gid(_Nonnull rpc_connection_t conn)
struct rpc_call * rpc_call_t
void *_Nullable rpc_connection_register_event_handler(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name, _Nullable rpc_handler_t handler)
void(^ rpc_property_handler_t)(_Nonnull rpc_object_t value)
enum rpc_error_code rpc_error_code_t
_Nullable rpc_object_t rpc_connection_set_propertyp(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name, const char *_Nonnull fmt,...)
enum rpc_call_type rpc_call_type_t
uid_t rpc_connection_get_remote_uid(_Nonnull rpc_connection_t conn)
void(^ rpc_handler_t)(const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name, _Nonnull rpc_object_t args)
_Nullable rpc_object_t rpc_connection_get_property(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name)
bool rpc_connection_has_credentials(_Nonnull rpc_connection_t conn)
int rpc_connection_close(_Nonnull rpc_connection_t conn)
int rpc_call_set_prefetch(_Nonnull rpc_call_t call, size_t nitems)
pid_t rpc_connection_get_remote_pid(_Nonnull rpc_connection_t conn)
void rpc_call_free(_Nonnull rpc_call_t call)
int rpc_call_abort(_Nonnull rpc_call_t call)
int rpc_connection_subscribe_event(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name)
void(^ rpc_error_handler_t)(rpc_error_code_t code, _Nullable rpc_object_t args)
int rpc_call_continue(_Nonnull rpc_call_t call, bool sync)
_Nullable rpc_object_t rpc_connection_call_syncpv(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull method, const char *_Nonnull fmt, va_list ap)
_Nullable rpc_object_t rpc_connection_set_propertypv(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name, const char *_Nonnull fmt, va_list ap)
_Nullable rpc_object_t rpc_connection_set_property(_Nonnull rpc_connection_t conn, const char *_Nullable path, const char *_Nullable interface, const char *_Nonnull name, rpc_object_t _Nonnull value)
void rpc_connection_set_event_handler(_Nonnull rpc_connection_t conn, _Nullable rpc_handler_t handler)