]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
05d3a176 | 2 | #pragma once |
f8e2fb7b | 3 | |
89bad70f LP |
4 | #include "pidref.h" |
5 | ||
f8e2fb7b LP |
6 | typedef struct Inhibitor Inhibitor; |
7 | ||
f8e2fb7b | 8 | typedef enum InhibitWhat { |
be0b7a1a LP |
9 | INHIBIT_SHUTDOWN = 1 << 0, |
10 | INHIBIT_SLEEP = 1 << 1, | |
11 | INHIBIT_IDLE = 1 << 2, | |
12 | INHIBIT_HANDLE_POWER_KEY = 1 << 3, | |
13 | INHIBIT_HANDLE_SUSPEND_KEY = 1 << 4, | |
14 | INHIBIT_HANDLE_HIBERNATE_KEY = 1 << 5, | |
15 | INHIBIT_HANDLE_LID_SWITCH = 1 << 6, | |
adbb2b6a RM |
16 | INHIBIT_HANDLE_REBOOT_KEY = 1 << 7, |
17 | _INHIBIT_WHAT_MAX = 1 << 8, | |
2d93c20e | 18 | _INHIBIT_WHAT_INVALID = -EINVAL, |
f8e2fb7b LP |
19 | } InhibitWhat; |
20 | ||
eecd1362 LP |
21 | typedef enum InhibitMode { |
22 | INHIBIT_BLOCK, | |
23 | INHIBIT_DELAY, | |
24 | _INHIBIT_MODE_MAX, | |
2d93c20e | 25 | _INHIBIT_MODE_INVALID = -EINVAL, |
eecd1362 LP |
26 | } InhibitMode; |
27 | ||
d889a206 | 28 | #include "logind.h" |
d889a206 | 29 | |
f8e2fb7b LP |
30 | struct Inhibitor { |
31 | Manager *manager; | |
32 | ||
cc377381 LP |
33 | sd_event_source *event_source; |
34 | ||
9f18eda8 | 35 | const char *id; |
f8e2fb7b LP |
36 | char *state_file; |
37 | ||
38 | bool started; | |
39 | ||
40 | InhibitWhat what; | |
41 | char *who; | |
42 | char *why; | |
eecd1362 | 43 | InhibitMode mode; |
f8e2fb7b | 44 | |
89bad70f | 45 | PidRef pid; |
f8e2fb7b LP |
46 | uid_t uid; |
47 | ||
c7b5eb98 LP |
48 | dual_timestamp since; |
49 | ||
f8e2fb7b LP |
50 | char *fifo_path; |
51 | int fifo_fd; | |
52 | }; | |
53 | ||
81280b2a LP |
54 | int inhibitor_new(Inhibitor **ret, Manager *m, const char* id); |
55 | Inhibitor* inhibitor_free(Inhibitor *i); | |
56 | ||
57 | DEFINE_TRIVIAL_CLEANUP_FUNC(Inhibitor*, inhibitor_free); | |
f8e2fb7b | 58 | |
f8e2fb7b LP |
59 | int inhibitor_load(Inhibitor *i); |
60 | ||
61 | int inhibitor_start(Inhibitor *i); | |
290320ef | 62 | void inhibitor_stop(Inhibitor *i); |
f8e2fb7b LP |
63 | |
64 | int inhibitor_create_fifo(Inhibitor *i); | |
f8e2fb7b | 65 | |
11eae36d LP |
66 | bool inhibitor_is_orphan(Inhibitor *i); |
67 | ||
eecd1362 | 68 | InhibitWhat manager_inhibit_what(Manager *m, InhibitMode mm); |
85a428c6 | 69 | bool manager_is_inhibited(Manager *m, InhibitWhat w, InhibitMode mm, dual_timestamp *since, bool ignore_inactive, bool ignore_uid, uid_t uid, Inhibitor **offending); |
f8e2fb7b | 70 | |
febe8131 MY |
71 | static inline bool inhibit_what_is_valid(InhibitWhat w) { |
72 | return w > 0 && w < _INHIBIT_WHAT_MAX; | |
73 | } | |
74 | ||
f8e2fb7b | 75 | const char *inhibit_what_to_string(InhibitWhat k); |
46ed9f4c | 76 | int inhibit_what_from_string(const char *s); |
f8e2fb7b | 77 | |
eecd1362 LP |
78 | const char *inhibit_mode_to_string(InhibitMode k); |
79 | InhibitMode inhibit_mode_from_string(const char *s); |