1/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2/* 3 * dbus-socket-set.h - used to bolt file descriptors onto a bus 4 * 5 * Copyright © 2011 Nokia Corporation 6 * 7 * Licensed under the Academic Free License version 2.1 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 22 * MA 02110-1301 USA 23 * 24 */ 25 26#ifndef DBUS_SOCKET_SET_H 27#define DBUS_SOCKET_SET_H 28 29#ifndef DOXYGEN_SHOULD_SKIP_THIS 30 31#include <dbus/dbus.h> 32 33typedef struct { 34 int fd; 35 unsigned int flags; 36} DBusSocketEvent; 37 38typedef struct DBusSocketSet DBusSocketSet; 39 40typedef struct DBusSocketSetClass DBusSocketSetClass; 41struct DBusSocketSetClass { 42 void (*free) (DBusSocketSet *self); 43 dbus_bool_t (*add) (DBusSocketSet *self, 44 int fd, 45 unsigned int flags, 46 dbus_bool_t enabled); 47 void (*remove) (DBusSocketSet *self, 48 int fd); 49 void (*enable) (DBusSocketSet *self, 50 int fd, 51 unsigned int flags); 52 void (*disable) (DBusSocketSet *self, 53 int fd); 54 int (*poll) (DBusSocketSet *self, 55 DBusSocketEvent *revents, 56 int max_events, 57 int timeout_ms); 58}; 59 60struct DBusSocketSet { 61 DBusSocketSetClass *cls; 62}; 63 64DBusSocketSet *_dbus_socket_set_new (int size_hint); 65 66static inline void 67_dbus_socket_set_free (DBusSocketSet *self) 68{ 69 (self->cls->free) (self); 70} 71 72static inline dbus_bool_t 73_dbus_socket_set_add (DBusSocketSet *self, 74 int fd, 75 unsigned int flags, 76 dbus_bool_t enabled) 77{ 78 return (self->cls->add) (self, fd, flags, enabled); 79} 80 81static inline void 82_dbus_socket_set_remove (DBusSocketSet *self, 83 int fd) 84{ 85 (self->cls->remove) (self, fd); 86} 87 88static inline void 89_dbus_socket_set_enable (DBusSocketSet *self, 90 int fd, 91 unsigned int flags) 92{ 93 (self->cls->enable) (self, fd, flags); 94} 95 96static inline void 97_dbus_socket_set_disable (DBusSocketSet *self, 98 int fd) 99{ 100 (self->cls->disable) (self, fd); 101} 102 103 104static inline int 105_dbus_socket_set_poll (DBusSocketSet *self, 106 DBusSocketEvent *revents, 107 int max_events, 108 int timeout_ms) 109{ 110 return (self->cls->poll) (self, revents, max_events, timeout_ms); 111} 112 113/* concrete implementations, not necessarily built on all platforms */ 114 115extern DBusSocketSetClass _dbus_socket_set_poll_class; 116extern DBusSocketSetClass _dbus_socket_set_epoll_class; 117 118DBusSocketSet *_dbus_socket_set_poll_new (int size_hint); 119DBusSocketSet *_dbus_socket_set_epoll_new (void); 120 121#endif /* !DOXYGEN_SHOULD_SKIP_THIS */ 122#endif /* multiple-inclusion guard */ 123