Merge branch 'master' of ssh://git.gnunet.org/gnunet
[oweals/gnunet.git] / src / arm / arm.h
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2009 GNUnet e.V.
4
5      GNUnet is free software: you can redistribute it and/or modify it
6      under the terms of the GNU Affero General Public License as published
7      by the Free Software Foundation, either version 3 of the License,
8      or (at your option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      Affero General Public License for more details.
14
15      You should have received a copy of the GNU Affero General Public License
16      along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18      SPDX-License-Identifier: AGPL3.0-or-later
19  */
20
21 /**
22  * @author Christian Grothoff
23  * @file arm/arm.h
24  */
25 #ifndef ARM_H
26 #define ARM_H
27
28 #include "gnunet_common.h"
29
30 /**
31  * This option will turn on the DEBUG loglevel for
32  * all processes controlled by this ARM!
33  */
34 #define DEBUG_ARM GNUNET_EXTRA_LOGGING
35
36 GNUNET_NETWORK_STRUCT_BEGIN
37
38 /**
39  * Status update from ARM to client.
40  */
41 struct GNUNET_ARM_StatusMessage {
42   /**
43    * Reply to client, of type is #GNUNET_MESSAGE_TYPE_ARM_STATUS.
44    */
45   struct GNUNET_MessageHeader header;
46
47   /**
48    * Status from the 'enum GNUNET_ARM_ServiceStatus'
49    */
50   uint32_t status;
51
52   /* followed by a 0-terminated service name */
53 };
54
55 struct GNUNET_ARM_Message {
56   /**
57    * Reply to client, type is #GNUNET_MESSAGE_TYPE_ARM_RESULT or
58    * #GNUNET_MESSAGE_TYPE_ARM_LIST_RESULT.
59    * OR
60    * Request from client, type is #GNUNET_MESSAGE_TYPE_ARM_START or
61    * #GNUNET_MESSAGE_TYPE_ARM_STOP.
62    */
63   struct GNUNET_MessageHeader header;
64
65   /**
66    * For alignment.
67    */
68   uint32_t reserved;
69
70   /**
71    * ID of a request that is being replied to.
72    * OR
73    * ID of a request that is being sent.
74    */
75   uint64_t request_id;
76
77   /* For requests - followed by a 0-terminated service name */
78 };
79
80
81 /**
82  * Reply from ARM to client.
83  */
84 struct GNUNET_ARM_ResultMessage {
85   /**
86    * Reply to client, of type is #GNUNET_MESSAGE_TYPE_ARM_RESULT, with an ID.
87    */
88   struct GNUNET_ARM_Message arm_msg;
89
90   /**
91    * Result from the `enum GNUNET_ARM_Result`
92    */
93   uint32_t result;
94 };
95
96 struct GNUNET_ARM_ServiceInfoMessage {
97   /**
98    * String pool index for the service's name.
99    */
100   uint16_t name_index;
101
102   /**
103    * String pool index for the service's binary.
104    */
105   uint16_t binary_index;
106
107   /**
108    * Last process exit status.
109    */
110   int16_t last_exit_status;
111
112   /**
113    * Padding.
114    */
115   uint16_t padding;
116
117   /**
118    * Status from the 'enum GNUNET_ARM_ServiceStatus'
119    */
120   uint32_t status;
121
122   /**
123    * Time when the sevice will be restarted, if applicable
124    * to the current status.
125    */
126   struct GNUNET_TIME_AbsoluteNBO restart_at;
127
128   /**
129    * Time when the sevice was first started, if applicable.
130    */
131   struct GNUNET_TIME_AbsoluteNBO last_started_at;
132 };
133
134 /**
135  * Reply from ARM to client for the
136  * #GNUNET_MESSAGE_TYPE_ARM_LIST request followed by count
137  * '\0' terminated strings. header->size contains the
138  * total size (including all strings).
139  */
140 struct GNUNET_ARM_ListResultMessage {
141   /**
142    * Reply to client, of type is #GNUNET_MESSAGE_TYPE_ARM_LIST_RESULT,
143    * with an ID.
144    */
145   struct GNUNET_ARM_Message arm_msg;
146
147   /**
148    * Number of 'struct GNUNET_ARM_ServiceInfoMessage' that
149    * are at the end of this message.
150    */
151   uint16_t count;
152
153   /* struct GNUNET_ARM_ServiceInfoMessage[count]; */
154   /* pool of 0-terminated strings */
155 };
156
157 GNUNET_NETWORK_STRUCT_END
158
159 #endif