libreport  2.13.1
A tool to inform users about various problems on the running system
client.h
1 /*
2  Copyright (C) 2011 ABRT team.
3  Copyright (C) 2011 RedHat inc.
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License along
16  with this program; if not, write to the Free Software Foundation, Inc.,
17  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 
19 
20  @brief API for interaction with users
21 
22  These functions should be used by all libreport plugins to make it possible
23  to use the plugins in EVENT scripts.
24 
25  ## Communication Protocol
26 
27  These functions work in two modes:
28  - MASTER : the called function will interact with user
29  - SLAVE : the called function will interact with the master process
30 
31  If the function is called in the slave mode, the function will prefix its
32  output with the relevant "REPORT_PREFIX_*" macro defined below. These
33  prefixes are detected by the master process so the master can react
34  appropriately to the slave's output.
35 
36  In the master mode, the functions does not taint its output because
37  the output will be directly shown to users.
38 
39  The mode is driven by the environment variable **REPORT_CLIENT_SLAVE**
40  If the variable is set to any value, the mode is SLAVE. In all other cases
41  the mode is MASTER.
42 
43 
44  ## Default answers
45 
46  Another environment variable that controls behaviour of these functions is
47  **REPORT_CLIENT_NONINTERACTIVE**. If this variable is set to some value and
48  the mode is not SLAVE, the function call does not wait for response from
49  user but returns immediately with a default return value. The default
50  values must not cause any harm to users, so the boolean functions returns
51  false (the default answer is "No") and the string function returns ""
52  (the default answer is no answer).
53 */
54 
55 #ifndef LIBREPORT_CLIENT_H_
56 #define LIBREPORT_CLIENT_H_
57 
58 
59 #define REPORT_PREFIX_ASK_YES_NO "ASK_YES_NO "
60 
74 #define REPORT_PREFIX_ASK_YES_NO_YESFOREVER "ASK_YES_NO_YESFOREVER "
75 
80 #define REPORT_PREFIX_ASK_YES_NO_SAVE_RESULT "ASK_YES_NO_SAVE_RESULT "
81 #define REPORT_PREFIX_ASK "ASK "
82 #define REPORT_PREFIX_ASK_PASSWORD "ASK_PASSWORD "
83 #define REPORT_PREFIX_ALERT "ALERT "
84 
85 #ifdef __cplusplus
86 extern "C" {
87 #endif
88 
89 int libreport_set_echo(int enable);
90 
91 int libreport_ask_yes_no(const char *question);
92 
116 int libreport_ask_yes_no_yesforever(const char *key, const char *question);
117 
122 int libreport_ask_yes_no_save_result(const char *key, const char *question);
123 
124 char *libreport_ask(const char *question);
125 
126 char *libreport_ask_password(const char *question);
127 
128 void libreport_alert(const char *message);
129 
130 void libreport_client_log(const char *message);
131 
132 #ifdef __cplusplus
133 }
134 #endif
135 
136 #endif