1 #pragma once 2 3 #include <systemd/sd-event.h> 4 5 namespace sdeventplus 6 { 7 namespace internal 8 { 9 10 /** @class SdEvent 11 * @brief Overridable direct sd_event interface 12 */ 13 class SdEvent 14 { 15 public: 16 virtual ~SdEvent() = default; 17 18 virtual int sd_event_default(sd_event** event) const = 0; 19 virtual int sd_event_new(sd_event** event) const = 0; 20 virtual sd_event* sd_event_ref(sd_event* event) const = 0; 21 virtual sd_event* sd_event_unref(sd_event* event) const = 0; 22 23 virtual int sd_event_add_io(sd_event* event, sd_event_source** source, 24 int fd, uint32_t events, sd_event_io_handler_t, 25 void* userdata) const = 0; 26 virtual int sd_event_add_time(sd_event* event, sd_event_source** source, 27 clockid_t clock, uint64_t usec, 28 uint64_t accuracy, 29 sd_event_time_handler_t callback, 30 void* userdata) const = 0; 31 virtual int sd_event_add_signal(sd_event* event, sd_event_source** source, 32 int sig, sd_event_signal_handler_t callback, 33 void* userdata) const = 0; 34 virtual int sd_event_add_child(sd_event* event, sd_event_source** source, 35 pid_t, int options, 36 sd_event_child_handler_t callback, 37 void* userdata) const = 0; 38 virtual int sd_event_add_defer(sd_event* event, sd_event_source** source, 39 sd_event_handler_t callback, 40 void* userdata) const = 0; 41 virtual int sd_event_add_post(sd_event* event, sd_event_source** source, 42 sd_event_handler_t callback, 43 void* userdata) const = 0; 44 virtual int sd_event_add_exit(sd_event* event, sd_event_source** source, 45 sd_event_handler_t callback, 46 void* userdata) const = 0; 47 48 virtual int sd_event_prepare(sd_event* event) const = 0; 49 virtual int sd_event_wait(sd_event* event, uint64_t usec) const = 0; 50 virtual int sd_event_dispatch(sd_event* event) const = 0; 51 virtual int sd_event_run(sd_event* event, uint64_t usec) const = 0; 52 virtual int sd_event_loop(sd_event* event) const = 0; 53 virtual int sd_event_exit(sd_event* event, int code) const = 0; 54 55 virtual int sd_event_now(sd_event* event, clockid_t clock, 56 uint64_t* usec) const = 0; 57 58 virtual int sd_event_get_exit_code(sd_event* event, int* code) const = 0; 59 virtual int sd_event_get_watchdog(sd_event* event) const = 0; 60 virtual int sd_event_set_watchdog(sd_event* event, int b) const = 0; 61 62 virtual sd_event_source* 63 sd_event_source_ref(sd_event_source* source) const = 0; 64 virtual sd_event_source* 65 sd_event_source_unref(sd_event_source* source) const = 0; 66 67 virtual void* 68 sd_event_source_get_userdata(sd_event_source* source) const = 0; 69 virtual void* sd_event_source_set_userdata(sd_event_source* source, 70 void* userdata) const = 0; 71 72 virtual int 73 sd_event_source_get_description(sd_event_source* source, 74 const char** description) const = 0; 75 virtual int 76 sd_event_source_set_description(sd_event_source* source, 77 const char* description) const = 0; 78 virtual int 79 sd_event_source_set_prepare(sd_event_source* source, 80 sd_event_handler_t callback) const = 0; 81 virtual int sd_event_source_get_pending(sd_event_source* source) const = 0; 82 virtual int sd_event_source_get_priority(sd_event_source* source, 83 int64_t* priority) const = 0; 84 virtual int sd_event_source_set_priority(sd_event_source* source, 85 int64_t priority) const = 0; 86 virtual int sd_event_source_get_enabled(sd_event_source* source, 87 int* enabled) const = 0; 88 virtual int sd_event_source_set_enabled(sd_event_source* source, 89 int enabled) const = 0; 90 virtual int sd_event_source_get_io_fd(sd_event_source* source) const = 0; 91 virtual int sd_event_source_set_io_fd(sd_event_source* source, 92 int fd) const = 0; 93 virtual int sd_event_source_get_io_events(sd_event_source* source, 94 uint32_t* events) const = 0; 95 virtual int sd_event_source_set_io_events(sd_event_source* source, 96 uint32_t events) const = 0; 97 virtual int sd_event_source_get_io_revents(sd_event_source* source, 98 uint32_t* revents) const = 0; 99 virtual int sd_event_source_get_time(sd_event_source* source, 100 uint64_t* usec) const = 0; 101 virtual int sd_event_source_set_time(sd_event_source* source, 102 uint64_t usec) const = 0; 103 virtual int sd_event_source_get_time_accuracy(sd_event_source* source, 104 uint64_t* usec) const = 0; 105 virtual int sd_event_source_set_time_accuracy(sd_event_source* source, 106 uint64_t usec) const = 0; 107 virtual int sd_event_source_get_signal(sd_event_source* source) const = 0; 108 virtual int sd_event_source_get_child_pid(sd_event_source* source, 109 pid_t* pid) const = 0; 110 virtual int sd_event_source_set_destroy_callback( 111 sd_event_source* source, sd_event_destroy_t callback) const = 0; 112 virtual int sd_event_source_get_destroy_callback( 113 sd_event_source* source, sd_event_destroy_t* callback) const = 0; 114 virtual int sd_event_source_set_floating(sd_event_source* source, 115 int b) const = 0; 116 virtual int sd_event_source_get_floating(sd_event_source* source) const = 0; 117 }; 118 119 /** @class SdEventImpl 120 * @brief sd_event concrete implementation 121 * @details Uses libsystemd to handle all sd_event calls 122 */ 123 class SdEventImpl : public SdEvent 124 { 125 public: 126 int sd_event_default(sd_event** event) const override; 127 int sd_event_new(sd_event** event) const override; 128 sd_event* sd_event_ref(sd_event* event) const override; 129 sd_event* sd_event_unref(sd_event* event) const override; 130 131 int sd_event_add_io(sd_event* event, sd_event_source** source, int fd, 132 uint32_t events, sd_event_io_handler_t callback, 133 void* userdata) const override; 134 int sd_event_add_time(sd_event* event, sd_event_source** source, 135 clockid_t clock, uint64_t usec, uint64_t accuracy, 136 sd_event_time_handler_t callback, 137 void* userdata) const override; 138 sd_event_add_signal(sd_event * event,sd_event_source ** source,int sig,sd_event_signal_handler_t callback,void * userdata) const139 int sd_event_add_signal(sd_event* event, sd_event_source** source, int sig, 140 sd_event_signal_handler_t callback, 141 void* userdata) const override 142 { 143 return ::sd_event_add_signal(event, source, sig, callback, userdata); 144 } 145 sd_event_add_child(sd_event * event,sd_event_source ** source,pid_t pid,int options,sd_event_child_handler_t callback,void * userdata) const146 int sd_event_add_child(sd_event* event, sd_event_source** source, pid_t pid, 147 int options, sd_event_child_handler_t callback, 148 void* userdata) const override 149 { 150 return ::sd_event_add_child(event, source, pid, options, callback, 151 userdata); 152 } 153 154 int sd_event_add_defer(sd_event* event, sd_event_source** source, 155 sd_event_handler_t callback, 156 void* userdata) const override; 157 int sd_event_add_post(sd_event* event, sd_event_source** source, 158 sd_event_handler_t callback, 159 void* userdata) const override; 160 int sd_event_add_exit(sd_event* event, sd_event_source** source, 161 sd_event_handler_t callback, 162 void* userdata) const override; 163 164 int sd_event_prepare(sd_event* event) const override; 165 int sd_event_wait(sd_event* event, uint64_t usec) const override; 166 int sd_event_dispatch(sd_event* event) const override; 167 int sd_event_run(sd_event* event, uint64_t usec) const override; 168 int sd_event_loop(sd_event* event) const override; 169 int sd_event_exit(sd_event* event, int code) const override; 170 171 int sd_event_now(sd_event* event, clockid_t clock, 172 uint64_t* usec) const override; 173 174 int sd_event_get_exit_code(sd_event* event, int* code) const override; 175 int sd_event_get_watchdog(sd_event* event) const override; 176 int sd_event_set_watchdog(sd_event* event, int b) const override; 177 178 sd_event_source* 179 sd_event_source_ref(sd_event_source* source) const override; 180 sd_event_source* 181 sd_event_source_unref(sd_event_source* source) const override; 182 183 void* sd_event_source_get_userdata(sd_event_source* source) const override; 184 void* sd_event_source_set_userdata(sd_event_source* source, 185 void* userdata) const override; 186 187 int sd_event_source_get_description( 188 sd_event_source* source, const char** description) const override; 189 int sd_event_source_set_description(sd_event_source* source, 190 const char* description) const override; 191 int sd_event_source_set_prepare(sd_event_source* source, 192 sd_event_handler_t callback) const override; 193 int sd_event_source_get_pending(sd_event_source* source) const override; 194 int sd_event_source_get_priority(sd_event_source* source, 195 int64_t* priority) const override; 196 int sd_event_source_set_priority(sd_event_source* source, 197 int64_t priority) const override; 198 int sd_event_source_get_enabled(sd_event_source* source, 199 int* enabled) const override; 200 int sd_event_source_set_enabled(sd_event_source* source, 201 int enabled) const override; 202 int sd_event_source_get_io_fd(sd_event_source* source) const override; 203 int sd_event_source_set_io_fd(sd_event_source* source, 204 int fd) const override; 205 int sd_event_source_get_io_events(sd_event_source* source, 206 uint32_t* events) const override; 207 int sd_event_source_set_io_events(sd_event_source* source, 208 uint32_t events) const override; 209 int sd_event_source_get_io_revents(sd_event_source* source, 210 uint32_t* revents) const override; 211 int sd_event_source_get_time(sd_event_source* source, 212 uint64_t* usec) const override; 213 int sd_event_source_set_time(sd_event_source* source, 214 uint64_t usec) const override; 215 int sd_event_source_get_time_accuracy(sd_event_source* source, 216 uint64_t* usec) const override; 217 int sd_event_source_set_time_accuracy(sd_event_source* source, 218 uint64_t usec) const override; 219 int sd_event_source_get_signal(sd_event_source* source) const override; 220 int sd_event_source_get_child_pid(sd_event_source* source, 221 pid_t* pid) const override; 222 int sd_event_source_set_destroy_callback( 223 sd_event_source* source, sd_event_destroy_t callback) const override; 224 int sd_event_source_get_destroy_callback( 225 sd_event_source* source, sd_event_destroy_t* callback) const override; 226 int sd_event_source_set_floating(sd_event_source* source, 227 int b) const override; 228 int sd_event_source_get_floating(sd_event_source* source) const override; 229 }; 230 231 /** @brief Default instantiation of sd_event 232 */ 233 extern SdEventImpl sdevent_impl; 234 235 } // namespace internal 236 } // namespace sdeventplus 237