]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/login/logind-session.h
Update TODO
[thirdparty/systemd.git] / src / login / logind-session.h
CommitLineData
90821c93
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
c2f1db8f 3#pragma once
90821c93
LP
4
5/***
6 This file is part of systemd.
7
8 Copyright 2011 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
90821c93
LP
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 18 Lesser General Public License for more details.
90821c93 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
90821c93
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
24typedef struct Session Session;
9444b1f2 25typedef enum KillWho KillWho;
90821c93
LP
26
27#include "list.h"
28#include "util.h"
29#include "logind.h"
30#include "logind-seat.h"
31#include "logind-user.h"
4b549144 32#include "login-shared.h"
90821c93 33
0604381b 34typedef enum SessionState {
fb6becb4 35 SESSION_OPENING, /* Session scope is being created */
0604381b
LP
36 SESSION_ONLINE, /* Logged in */
37 SESSION_ACTIVE, /* Logged in and in the fg */
fb6becb4 38 SESSION_CLOSING, /* Logged out, but scope is still there */
0604381b
LP
39 _SESSION_STATE_MAX,
40 _SESSION_STATE_INVALID = -1
41} SessionState;
42
55efac6c
LP
43typedef enum SessionClass {
44 SESSION_USER,
45 SESSION_GREETER,
46 SESSION_LOCK_SCREEN,
e2acb67b 47 SESSION_BACKGROUND,
55efac6c
LP
48 _SESSION_CLASS_MAX,
49 _SESSION_CLASS_INVALID = -1
50} SessionClass;
51
e2acb67b
LP
52typedef enum SessionType {
53 SESSION_UNSPECIFIED,
54 SESSION_TTY,
55 SESSION_X11,
56 _SESSION_TYPE_MAX,
57 _SESSION_TYPE_INVALID = -1
58} SessionType;
59
9444b1f2 60enum KillWho {
de07ab16
LP
61 KILL_LEADER,
62 KILL_ALL,
63 _KILL_WHO_MAX,
64 _KILL_WHO_INVALID = -1
9444b1f2 65};
de07ab16 66
90821c93
LP
67struct Session {
68 Manager *manager;
69
70 char *id;
71 SessionType type;
55efac6c 72 SessionClass class;
90821c93
LP
73
74 char *state_file;
75
76 User *user;
77
78 dual_timestamp timestamp;
79
80 char *tty;
81 char *display;
82
83 bool remote;
3f49d45a 84 char *remote_user;
90821c93 85 char *remote_host;
98a28fef 86 char *service;
fb6becb4
LP
87
88 char *scope;
89 char *scope_job;
98a28fef 90
90821c93
LP
91 int vtnr;
92 Seat *seat;
93
94 pid_t leader;
3f49d45a 95 uint32_t audit_id;
90821c93 96
932e3ee7
LP
97 int fifo_fd;
98 char *fifo_path;
90821c93 99
a185c5aa
LP
100 bool idle_hint;
101 dual_timestamp idle_hint_timestamp;
102
14c3baca 103 bool in_gc_queue:1;
9418f147 104 bool started:1;
405e0255 105 bool closing:1;
90821c93 106
fb6becb4
LP
107 DBusMessage *create_message;
108
ae5e06bd
DH
109 char *controller;
110
90821c93
LP
111 LIST_FIELDS(Session, sessions_by_user);
112 LIST_FIELDS(Session, sessions_by_seat);
14c3baca
LP
113
114 LIST_FIELDS(Session, gc_queue);
90821c93
LP
115};
116
9444b1f2 117Session *session_new(Manager *m, const char *id);
90821c93 118void session_free(Session *s);
9444b1f2 119void session_set_user(Session *s, User *u);
4a4b033f 120int session_check_gc(Session *s, bool drop_not_started);
14c3baca 121void session_add_to_gc_queue(Session *s);
90821c93
LP
122int session_activate(Session *s);
123bool session_is_active(Session *s);
a185c5aa 124int session_get_idle_hint(Session *s, dual_timestamp *t);
bef422ae 125void session_set_idle_hint(Session *s, bool b);
932e3ee7
LP
126int session_create_fifo(Session *s);
127void session_remove_fifo(Session *s);
90821c93
LP
128int session_start(Session *s);
129int session_stop(Session *s);
405e0255 130int session_finalize(Session *s);
90821c93
LP
131int session_save(Session *s);
132int session_load(Session *s);
de07ab16 133int session_kill(Session *s, KillWho who, int signo);
90821c93 134
3f49d45a
LP
135char *session_bus_path(Session *s);
136
0604381b
LP
137SessionState session_get_state(Session *u);
138
3f49d45a
LP
139extern const DBusObjectPathVTable bus_session_vtable;
140
da119395 141int session_send_signal(Session *s, bool new_session);
9418f147 142int session_send_changed(Session *s, const char *properties);
88e3dc90 143int session_send_lock(Session *s, bool lock);
7ba64386 144int session_send_lock_all(Manager *m, bool lock);
da119395 145
fb6becb4
LP
146int session_send_create_reply(Session *s, DBusError *error);
147
44a6b1b6
ZJS
148const char* session_state_to_string(SessionState t) _const_;
149SessionState session_state_from_string(const char *s) _pure_;
0604381b 150
44a6b1b6
ZJS
151const char* session_type_to_string(SessionType t) _const_;
152SessionType session_type_from_string(const char *s) _pure_;
90821c93 153
44a6b1b6
ZJS
154const char* session_class_to_string(SessionClass t) _const_;
155SessionClass session_class_from_string(const char *s) _pure_;
55efac6c 156
44a6b1b6
ZJS
157const char *kill_who_to_string(KillWho k) _const_;
158KillWho kill_who_from_string(const char *s) _pure_;
ae5e06bd
DH
159
160bool session_is_controller(Session *s, const char *sender);
161int session_set_controller(Session *s, const char *sender, bool force);
162void session_drop_controller(Session *s);