#ifndef D_BUS_SERVER_UTILITIES_H
#define D_BUS_SERVER_UTILITIES_H
#include <stdint.h>
#include <stdarg.h>
#include <isc/types.h>
typedef struct dbcs_s* DBUS_SVC;
typedef enum
{ HANDLED, NOT_HANDLED, HANDLED_NOW
} dbus_svc_HandlerResult;
typedef enum
{ INVALID, CALL, RETURN, ERROR, SIGNAL
} dbus_svc_MessageType;
typedef enum
{
DBUS_SESSION,
DBUS_SYSTEM,
DBUS_STARTER,
DBUS_PRIVATE_SYSTEM,
DBUS_PRIVATE_SESSION
} dbus_svc_DBUS_TYPE;
typedef enum
{
TYPE_INVALID = (int)'\0',
TYPE_BYTE = (int)'y',
TYPE_BOOLEAN = (int)'b',
TYPE_INT16 = (int)'n',
TYPE_UINT16 = (int)'q',
TYPE_INT32 = (int)'i',
TYPE_UINT32 = (int)'u',
TYPE_INT64 = (int)'x',
TYPE_UINT64 = (int)'t',
TYPE_DOUBLE = (int)'d',
TYPE_STRING = (int)'s',
TYPE_OBJECT_PATH =(int)'o',
TYPE_SIGNATURE= (int)'g',
TYPE_ARRAY = (int)'a',
TYPE_VARIANT = (int)'v',
TYPE_STRUCT = (int)'r',
TYPE_DICT_ENTRY = (int)'e',
STRUCT_BEGIN = (int)'(',
STRUCT_END = (int)')',
DICT_ENTRY_BEGIN =(int)'{',
DICT_ENTRY_END =(int)'}'
} dbus_svc_DataType;
typedef struct DBusMessage* dbus_svc_MessageHandle;
typedef int
(*dbus_svc_ErrorHandler)
( const char *errorFmt, ...
);
typedef enum
{
WATCH_ENABLE = 8,
WATCH_ERROR = 4,
WATCH_WRITE = 2,
WATCH_READ = 1
} dbus_svc_WatchFlags;
typedef void (*dbus_svc_WatchHandler)( int, dbus_svc_WatchFlags, void *arg );
typedef dbus_svc_HandlerResult
(*dbus_svc_MessageHandler)
( DBUS_SVC dbus,
dbus_svc_MessageType type,
uint8_t reply_expected,
uint32_t serial,
const char *destination,
const char *path,
const char *member,
const char *interface,
const char *if_suffix,
const char *sender,
const char *signature,
dbus_svc_MessageHandle msg,
const char *prefix,
const char *suffix,
void *prefixObject,
void *object
);
#define DBusMsgHandlerArgs \
DBUS_SVC dbus, \
dbus_svc_MessageType type, \
uint8_t reply_expected, \
uint32_t serial, \
const char *destination, \
const char *path, \
const char *member, \
const char *interface, \
const char *if_suffix, \
const char *sender, \
const char *signature, \
dbus_svc_MessageHandle msg, \
const char *prefix, \
const char *suffix, \
void *prefixObject, \
void *object
#define SHUTDOWN 255
extern isc_result_t dbus_svc_init
( dbus_svc_DBUS_TYPE bus,
char *name,
DBUS_SVC *dbus,
dbus_svc_WatchHandler wh,
dbus_svc_ErrorHandler eh,
dbus_svc_ErrorHandler dh,
void *wh_arg
);
uint8_t
dbus_svc_add_filter
( DBUS_SVC, dbus_svc_MessageHandler mh, void *obj, int n_matches, ... );
void dbus_svc_main_loop( DBUS_SVC, void (*idle_handler)(DBUS_SVC) );
void dbus_svc_handle_watch( DBUS_SVC, int watch_fd, dbus_svc_WatchFlags action);
void dbus_svc_dispatch( DBUS_SVC );
const char *dbus_svc_unique_name( DBUS_SVC );
void dbus_svc_quit( DBUS_SVC );
void dbus_svc_shutdown( DBUS_SVC );
uint8_t
dbus_svc_get_args( DBUS_SVC, dbus_svc_MessageHandle, dbus_svc_DataType, ... );
uint8_t
dbus_svc_get_args_va( DBUS_SVC, dbus_svc_MessageHandle, dbus_svc_DataType, va_list );
typedef void (*dbus_svc_ShutdownHandler) ( DBUS_SVC, void * );
uint8_t
dbus_svc_add_shutdown_filter
(
DBUS_SVC, dbus_svc_ShutdownHandler sh, void *obj
);
uint8_t
dbus_svc_remove_message_filter
( DBUS_SVC, dbus_svc_MessageHandler mh);
uint8_t
dbus_svc_send
( DBUS_SVC,
dbus_svc_MessageType type,
int32_t reply_serial,
uint32_t *new_serial,
const char *destination,
const char *path,
const char *member,
const char *interface,
dbus_svc_DataType firstType,
...
);
uint8_t
dbus_svc_send_va
( DBUS_SVC cs,
dbus_svc_MessageType type,
int32_t reply_serial,
uint32_t *new_serial,
const char *destination,
const char *path,
const char *member,
const char *interface,
dbus_svc_DataType firstType,
va_list va
);
dbus_svc_MessageHandle
dbus_svc_call
( DBUS_SVC cs,
const char *destination,
const char *path,
const char *member,
const char *interface,
dbus_svc_DataType firstType,
...
);
dbus_svc_MessageHandle
dbus_svc_new_message
( DBUS_SVC cs,
dbus_svc_MessageType type,
int32_t reply_serial,
const char *destination,
const char *path,
const char *interface,
const char *member
);
uint8_t
dbus_svc_send_message(DBUS_SVC , dbus_svc_MessageHandle , uint32_t * );
uint8_t
dbus_svc_message_append_args( DBUS_SVC , dbus_svc_MessageHandle, dbus_svc_DataType, ...);
typedef struct DBusMessageIter *dbus_svc_MessageIterator;
dbus_svc_MessageIterator
dbus_svc_message_iterator_new( DBUS_SVC, dbus_svc_MessageHandle );
uint32_t
dbus_svc_message_next_arg_type( DBUS_SVC, dbus_svc_MessageIterator );
void
dbus_svc_message_next_arg( DBUS_SVC, dbus_svc_MessageIterator, void * );
uint32_t
dbus_svc_message_element_type( DBUS_SVC, dbus_svc_MessageIterator );
void
dbus_svc_message_get_elements( DBUS_SVC, dbus_svc_MessageIterator, uint32_t *n, void *array );
uint8_t dbus_svc_message_type( dbus_svc_MessageHandle );
void dbus_svc_message_iterator_free( DBUS_SVC, dbus_svc_MessageIterator );
#endif