LCOV - code coverage report
Current view: top level - login - logind-session.h (source / functions) Hit Total Coverage
Test: main_coverage.info Lines: 0 5 0.0 %
Date: 2019-08-22 15:41:25 Functions: 0 3 0.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: LGPL-2.1+ */
       2             : #pragma once
       3             : 
       4             : typedef struct Session Session;
       5             : typedef enum KillWho KillWho;
       6             : 
       7             : #include "list.h"
       8             : #include "login-util.h"
       9             : #include "logind-user.h"
      10             : #include "string-util.h"
      11             : 
      12             : typedef enum SessionState {
      13             :         SESSION_OPENING,  /* Session scope is being created */
      14             :         SESSION_ONLINE,   /* Logged in */
      15             :         SESSION_ACTIVE,   /* Logged in and in the fg */
      16             :         SESSION_CLOSING,  /* Logged out, but scope is still there */
      17             :         _SESSION_STATE_MAX,
      18             :         _SESSION_STATE_INVALID = -1
      19             : } SessionState;
      20             : 
      21             : typedef enum SessionClass {
      22             :         SESSION_USER,
      23             :         SESSION_GREETER,
      24             :         SESSION_LOCK_SCREEN,
      25             :         SESSION_BACKGROUND,
      26             :         _SESSION_CLASS_MAX,
      27             :         _SESSION_CLASS_INVALID = -1
      28             : } SessionClass;
      29             : 
      30             : typedef enum SessionType {
      31             :         SESSION_UNSPECIFIED,
      32             :         SESSION_TTY,
      33             :         SESSION_X11,
      34             :         SESSION_WAYLAND,
      35             :         SESSION_MIR,
      36             :         SESSION_WEB,
      37             :         _SESSION_TYPE_MAX,
      38             :         _SESSION_TYPE_INVALID = -1
      39             : } SessionType;
      40             : 
      41             : #define SESSION_TYPE_IS_GRAPHICAL(type) IN_SET(type, SESSION_X11, SESSION_WAYLAND, SESSION_MIR)
      42             : 
      43             : enum KillWho {
      44             :         KILL_LEADER,
      45             :         KILL_ALL,
      46             :         _KILL_WHO_MAX,
      47             :         _KILL_WHO_INVALID = -1
      48             : };
      49             : 
      50             : typedef enum TTYValidity {
      51             :         TTY_FROM_PAM,
      52             :         TTY_FROM_UTMP,
      53             :         TTY_UTMP_INCONSISTENT, /* may happen on ssh sessions with multiplexed TTYs */
      54             :         _TTY_VALIDITY_MAX,
      55             :         _TTY_VALIDITY_INVALID = -1,
      56             : } TTYValidity;
      57             : 
      58             : struct Session {
      59             :         Manager *manager;
      60             : 
      61             :         const char *id;
      62             :         unsigned position;
      63             :         SessionType type;
      64             :         SessionClass class;
      65             : 
      66             :         char *state_file;
      67             : 
      68             :         User *user;
      69             : 
      70             :         dual_timestamp timestamp;
      71             : 
      72             :         char *display;
      73             :         char *tty;
      74             :         TTYValidity tty_validity;
      75             : 
      76             :         bool remote;
      77             :         char *remote_user;
      78             :         char *remote_host;
      79             :         char *service;
      80             :         char *desktop;
      81             : 
      82             :         char *scope;
      83             :         char *scope_job;
      84             : 
      85             :         Seat *seat;
      86             :         unsigned vtnr;
      87             :         int vtfd;
      88             : 
      89             :         pid_t leader;
      90             :         uint32_t audit_id;
      91             : 
      92             :         int fifo_fd;
      93             :         char *fifo_path;
      94             : 
      95             :         sd_event_source *fifo_event_source;
      96             : 
      97             :         bool idle_hint;
      98             :         dual_timestamp idle_hint_timestamp;
      99             : 
     100             :         bool locked_hint;
     101             : 
     102             :         bool in_gc_queue:1;
     103             :         bool started:1;
     104             :         bool stopping:1;
     105             : 
     106             :         bool was_active:1;
     107             : 
     108             :         sd_bus_message *create_message;
     109             : 
     110             :         /* Set up when a client requested to release the session via the bus */
     111             :         sd_event_source *timer_event_source;
     112             : 
     113             :         char *controller;
     114             :         Hashmap *devices;
     115             :         sd_bus_track *track;
     116             : 
     117             :         LIST_FIELDS(Session, sessions_by_user);
     118             :         LIST_FIELDS(Session, sessions_by_seat);
     119             : 
     120             :         LIST_FIELDS(Session, gc_queue);
     121             : };
     122             : 
     123             : int session_new(Session **ret, Manager *m, const char *id);
     124             : Session* session_free(Session *s);
     125             : 
     126           0 : DEFINE_TRIVIAL_CLEANUP_FUNC(Session *, session_free);
     127             : 
     128             : void session_set_user(Session *s, User *u);
     129             : int session_set_leader(Session *s, pid_t pid);
     130             : bool session_may_gc(Session *s, bool drop_not_started);
     131             : void session_add_to_gc_queue(Session *s);
     132             : int session_activate(Session *s);
     133             : bool session_is_active(Session *s);
     134             : int session_get_idle_hint(Session *s, dual_timestamp *t);
     135             : void session_set_idle_hint(Session *s, bool b);
     136             : int session_get_locked_hint(Session *s);
     137             : void session_set_locked_hint(Session *s, bool b);
     138             : int session_create_fifo(Session *s);
     139             : int session_start(Session *s, sd_bus_message *properties, sd_bus_error *error);
     140             : int session_stop(Session *s, bool force);
     141             : int session_finalize(Session *s);
     142             : int session_release(Session *s);
     143             : int session_save(Session *s);
     144             : int session_load(Session *s);
     145             : int session_kill(Session *s, KillWho who, int signo);
     146             : 
     147             : SessionState session_get_state(Session *u);
     148             : 
     149             : const char* session_state_to_string(SessionState t) _const_;
     150             : SessionState session_state_from_string(const char *s) _pure_;
     151             : 
     152             : const char* session_type_to_string(SessionType t) _const_;
     153             : SessionType session_type_from_string(const char *s) _pure_;
     154             : 
     155             : const char* session_class_to_string(SessionClass t) _const_;
     156             : SessionClass session_class_from_string(const char *s) _pure_;
     157             : 
     158             : const char *kill_who_to_string(KillWho k) _const_;
     159             : KillWho kill_who_from_string(const char *s) _pure_;
     160             : 
     161             : const char* tty_validity_to_string(TTYValidity t) _const_;
     162             : TTYValidity tty_validity_from_string(const char *s) _pure_;
     163             : 
     164             : int session_prepare_vt(Session *s);
     165             : void session_leave_vt(Session *s);
     166             : 
     167             : bool session_is_controller(Session *s, const char *sender);
     168             : int session_set_controller(Session *s, const char *sender, bool force, bool prepare);
     169             : void session_drop_controller(Session *s);
     170             : 
     171           0 : static inline bool SESSION_IS_SELF(const char *name) {
     172           0 :         return isempty(name) || streq(name, "self");
     173             : }
     174             : 
     175           0 : static inline bool SESSION_IS_AUTO(const char *name) {
     176           0 :         return streq_ptr(name, "auto");
     177             : }

Generated by: LCOV version 1.14