dbus_service.h
来自「非常好的dns解析软件」· C头文件 代码 · 共 285 行
H
285 行
/* D-BUS Service Utilities * * Provides utilities for construction of D-BUS "Services" * * Copyright(C) Jason Vas Dias, Red Hat Inc., 2005 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation at * http://www.fsf.org/licensing/licenses/gpl.txt * and included in this software distribution as the "LICENSE" file. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */#ifndef D_BUS_SERVER_UTILITIES_H#define D_BUS_SERVER_UTILITIES_H#include <stdint.h>#include <stdarg.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 /* D-BUS Protocol Type Codes / Signature Chars */{ 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, ...); /* Error Handler function prototype - handle FATAL errors from D-BUS calls */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, /* 1 / 0 */ uint32_t serial, /* serial number of message; needed to reply */ const char *destination, /* D-BUS connection name / destination */ const char *path, /* D-BUS Object Path */ const char *member, /* D-BUS Object Member */ const char *interface, /* D-BUS Object interface */ const char *if_suffix, /* remainder of interface prefixed by ifPrefix */ const char *sender, /* Senders' connection destination */ const char *signature, /* Signature String composed of Type Codes */ dbus_svc_MessageHandle msg,/* Message pointer: call dbus_svc_get_args(msg,...) to get data */ const char *prefix, /* If non-null, this is the root prefix for this sub-path message */ const char *suffix, /* If non-null, this is the suffix of this sub-path message */ void *prefixObject, /* If non-null, this is the object that was registered for the prefix */ void *object /* If non-null, this is the object that was registered for the complete path */); /* Message Handler function prototype */#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 255extern DBUS_SVC dbus_svc_init( dbus_svc_DBUS_TYPE bus, char *name, /* name to register with D-BUS */ dbus_svc_WatchHandler wh, /* optional handler for watch events */ dbus_svc_ErrorHandler eh, /* optional error log message handler */ dbus_svc_ErrorHandler dh, /* optional debug / info log message handler */ void *wh_arg /* optional watch handler arg */); /* * Obtains connection to DBUS_BUS_STARTER and registers "name". * "eh" will be called for all errors from this server session. *//* EITHER : * pass a NULL WatchHandler to dbus_svc_init and use dbus_svc_main_loop * OR: * supply a valid WatchHandler, and call dbus_svc_handle_watch when * select() returns the watch fd as ready for the watch action, and * call dbus_svc_dispatch when all watches have been handled. */ uint8_tdbus_svc_add_filter( DBUS_SVC, dbus_svc_MessageHandler mh, void *obj, int n_matches, ... );/* * Registers SINGLE message handler to handle ALL messages, adding match rules */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 );/* * Enter message processing loop. * If "idle_handler" is non-null, it will be called once per iteration of loop. */const char *dbus_svc_unique_name( DBUS_SVC );/* * Returns connection "unique" (socket) name */void dbus_svc_quit( DBUS_SVC );/* * Exit message processing loop */void dbus_svc_shutdown( DBUS_SVC );/* * Close connections and clean up. * DBUS_SVC pointer is invalid after this. */uint8_tdbus_svc_get_args( DBUS_SVC, dbus_svc_MessageHandle, dbus_svc_DataType, ... );/* get arguments from message */uint8_tdbus_svc_get_args_va( DBUS_SVC, dbus_svc_MessageHandle, dbus_svc_DataType, va_list );/* get arguments from message */typedef void (*dbus_svc_ShutdownHandler) ( DBUS_SVC, void * );uint8_tdbus_svc_add_shutdown_filter( DBUS_SVC, dbus_svc_ShutdownHandler sh, void *obj );/* Registers a filter for D-BUS shutdown event. * Cannot be used in conjunction with dbus_svc_add_message_filter. */uint8_tdbus_svc_remove_message_filter( DBUS_SVC, dbus_svc_MessageHandler mh);/* Unregisters the message filter */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, ... /* pointer, { (dbus_svc_DataType, pointer )...} */ ); /* sends messages / replies to "destination" */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); /* sends messages / replies to "destination" */dbus_svc_MessageHandledbus_svc_call( DBUS_SVC cs, const char *destination, const char *path, const char *member, const char *interface, dbus_svc_DataType firstType, ...); /* constructs message, sends it, returns reply */dbus_svc_MessageHandledbus_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_tdbus_svc_send_message(DBUS_SVC , dbus_svc_MessageHandle , uint32_t * );uint8_tdbus_svc_message_append_args( DBUS_SVC , dbus_svc_MessageHandle, dbus_svc_DataType, ...);typedef struct DBusMessageIter *dbus_svc_MessageIterator;dbus_svc_MessageIteratordbus_svc_message_iterator_new( DBUS_SVC, dbus_svc_MessageHandle );uint32_tdbus_svc_message_next_arg_type( DBUS_SVC, dbus_svc_MessageIterator );voiddbus_svc_message_next_arg( DBUS_SVC, dbus_svc_MessageIterator, void * );uint32_tdbus_svc_message_element_type( DBUS_SVC, dbus_svc_MessageIterator );voiddbus_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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?