]> git.proxmox.com Git - systemd.git/blame - src/login/logind-session.h
Imported Upstream version 208
[systemd.git] / src / login / logind-session.h
CommitLineData
663996b3
MS
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#pragma once
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
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
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
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
24typedef struct Session Session;
14228c0d 25typedef enum KillWho KillWho;
663996b3
MS
26
27#include "list.h"
28#include "util.h"
29#include "logind.h"
30#include "logind-seat.h"
14228c0d 31#include "logind-session-device.h"
663996b3 32#include "logind-user.h"
14228c0d 33#include "login-shared.h"
663996b3
MS
34
35typedef enum SessionState {
14228c0d 36 SESSION_OPENING, /* Session scope is being created */
663996b3
MS
37 SESSION_ONLINE, /* Logged in */
38 SESSION_ACTIVE, /* Logged in and in the fg */
14228c0d 39 SESSION_CLOSING, /* Logged out, but scope is still there */
663996b3
MS
40 _SESSION_STATE_MAX,
41 _SESSION_STATE_INVALID = -1
42} SessionState;
43
44typedef enum SessionClass {
45 SESSION_USER,
46 SESSION_GREETER,
47 SESSION_LOCK_SCREEN,
48 SESSION_BACKGROUND,
49 _SESSION_CLASS_MAX,
50 _SESSION_CLASS_INVALID = -1
51} SessionClass;
52
53typedef enum SessionType {
54 SESSION_UNSPECIFIED,
55 SESSION_TTY,
56 SESSION_X11,
57 _SESSION_TYPE_MAX,
58 _SESSION_TYPE_INVALID = -1
59} SessionType;
60
14228c0d 61enum KillWho {
663996b3
MS
62 KILL_LEADER,
63 KILL_ALL,
64 _KILL_WHO_MAX,
65 _KILL_WHO_INVALID = -1
14228c0d 66};
663996b3
MS
67
68struct Session {
69 Manager *manager;
70
71 char *id;
72 SessionType type;
73 SessionClass class;
74
75 char *state_file;
76
77 User *user;
78
79 dual_timestamp timestamp;
80
81 char *tty;
82 char *display;
83
84 bool remote;
85 char *remote_user;
86 char *remote_host;
663996b3
MS
87 char *service;
88
14228c0d
MB
89 char *scope;
90 char *scope_job;
91
663996b3
MS
92 int vtnr;
93 Seat *seat;
94
95 pid_t leader;
96 uint32_t audit_id;
97
98 int fifo_fd;
99 char *fifo_path;
100
663996b3
MS
101 bool idle_hint;
102 dual_timestamp idle_hint_timestamp;
103
663996b3
MS
104 bool in_gc_queue:1;
105 bool started:1;
14228c0d
MB
106 bool closing:1;
107
108 DBusMessage *create_message;
109
110 char *controller;
111 Hashmap *devices;
663996b3
MS
112
113 LIST_FIELDS(Session, sessions_by_user);
114 LIST_FIELDS(Session, sessions_by_seat);
115
116 LIST_FIELDS(Session, gc_queue);
117};
118
14228c0d 119Session *session_new(Manager *m, const char *id);
663996b3 120void session_free(Session *s);
14228c0d 121void session_set_user(Session *s, User *u);
663996b3
MS
122int session_check_gc(Session *s, bool drop_not_started);
123void session_add_to_gc_queue(Session *s);
124int session_activate(Session *s);
125bool session_is_active(Session *s);
126int session_get_idle_hint(Session *s, dual_timestamp *t);
127void session_set_idle_hint(Session *s, bool b);
128int session_create_fifo(Session *s);
129void session_remove_fifo(Session *s);
130int session_start(Session *s);
131int session_stop(Session *s);
14228c0d 132int session_finalize(Session *s);
663996b3
MS
133int session_save(Session *s);
134int session_load(Session *s);
135int session_kill(Session *s, KillWho who, int signo);
136
137char *session_bus_path(Session *s);
138
139SessionState session_get_state(Session *u);
140
141extern const DBusObjectPathVTable bus_session_vtable;
142
143int session_send_signal(Session *s, bool new_session);
144int session_send_changed(Session *s, const char *properties);
145int session_send_lock(Session *s, bool lock);
146int session_send_lock_all(Manager *m, bool lock);
147
14228c0d
MB
148int session_send_create_reply(Session *s, DBusError *error);
149
663996b3
MS
150const char* session_state_to_string(SessionState t) _const_;
151SessionState session_state_from_string(const char *s) _pure_;
152
153const char* session_type_to_string(SessionType t) _const_;
154SessionType session_type_from_string(const char *s) _pure_;
155
156const char* session_class_to_string(SessionClass t) _const_;
157SessionClass session_class_from_string(const char *s) _pure_;
158
159const char *kill_who_to_string(KillWho k) _const_;
160KillWho kill_who_from_string(const char *s) _pure_;
14228c0d
MB
161
162bool session_is_controller(Session *s, const char *sender);
163int session_set_controller(Session *s, const char *sender, bool force);
164void session_drop_controller(Session *s);