daemon: On fork, open stdin/stdout/stderr on /dev/null.
[whenjobs.git] / lib / whenproto.x
1 /* whenjobs -*- c -*-
2  * (C) Copyright 2012 Red Hat Inc.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17  */
18
19 /* This is the protocol used to talk between the client (whenjobs) and
20  * the daemon (whenjobsd).  Communication happens over a Unix domain
21  * socket '$HOME/.whenjobs/socket'.  The wire protocol is SunRPC.
22  */
23
24 /* Maximum length of a variable name and string value. */
25 const MAX_VARIABLE_NAME_LENGTH = 256;
26 const MAX_VARIABLE_VALUE_LENGTH = 65536;
27
28 typedef string variable_name<MAX_VARIABLE_NAME_LENGTH>;
29 typedef string string_value<MAX_VARIABLE_VALUE_LENGTH>;
30
31 typedef variable_name variable_name_list<>;
32
33 /* Status code (OK or error) returned by most calls. */
34 enum status_code {
35   OK = 1,
36   ERROR = 2
37 };
38
39 union status switch (status_code s) {
40  case OK:
41    void;
42  case ERROR:
43    string error<>;
44 };
45
46 enum variable_type {
47   UNIT_T = 0,
48   BOOL_T = 1,
49   STRING_T = 2,
50   INT_T = 3,
51   FLOAT_T = 4
52 };
53
54 union variable switch (variable_type t) {
55  case UNIT_T:
56    void;
57  case BOOL_T:
58    bool b;
59  case STRING_T:
60    string_value s;
61  case INT_T:
62    string i<64>;             /* OCaml [big_int], as a string. */
63  case FLOAT_T:
64    double f;                 /* C 'double' maps to an OCaml 'float' */
65 };
66
67 /* The API of the daemon. */
68 program When {
69   version V1 {
70     status reload_file (void) = 1;
71     status set_variable (variable_name, variable) = 2;
72     variable get_variable (variable_name) = 3;
73     variable_name_list get_variable_names (void) = 4;
74     status exit_daemon (void) = 5;
75   } = 1;
76 } = 0x20008081;