remove 'illegal' (non-reentrant) log logic from signal handler
[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   /**
44    * Reply to client, of type is #GNUNET_MESSAGE_TYPE_ARM_STATUS.
45    */
46   struct GNUNET_MessageHeader header;
47
48   /**
49    * Status from the 'enum GNUNET_ARM_ServiceStatus'
50    */
51   uint32_t status;
52
53   /* followed by a 0-terminated service name */
54 };
55
56 struct GNUNET_ARM_Message
57 {
58   /**
59    * Reply to client, type is #GNUNET_MESSAGE_TYPE_ARM_RESULT or
60    * #GNUNET_MESSAGE_TYPE_ARM_LIST_RESULT.
61    * OR
62    * Request from client, type is #GNUNET_MESSAGE_TYPE_ARM_START or
63    * #GNUNET_MESSAGE_TYPE_ARM_STOP.
64    */
65   struct GNUNET_MessageHeader header;
66
67   /**
68    * For alignment.
69    */
70   uint32_t reserved;
71
72   /**
73    * ID of a request that is being replied to.
74    * OR
75    * ID of a request that is being sent.
76    */
77   uint64_t request_id;
78
79   /* For requests - followed by a 0-terminated service name */
80 };
81
82
83 /**
84  * Reply from ARM to client.
85  */
86 struct GNUNET_ARM_ResultMessage
87 {
88   /**
89    * Reply to client, of type is #GNUNET_MESSAGE_TYPE_ARM_RESULT, with an ID.
90    */
91   struct GNUNET_ARM_Message arm_msg;
92
93   /**
94    * Result from the `enum GNUNET_ARM_Result`
95    */
96   uint32_t result;
97 };
98
99 struct GNUNET_ARM_ServiceInfoMessage
100 {
101   /**
102    * String pool index for the service's name.
103    */
104   uint16_t name_index;
105
106   /**
107    * String pool index for the service's binary.
108    */
109   uint16_t binary_index;
110
111   /**
112    * Last process exit status.
113    */
114   int16_t last_exit_status;
115
116   /**
117    * Padding.
118    */
119   uint16_t padding;
120
121   /**
122    * Status from the 'enum GNUNET_ARM_ServiceStatus'
123    */
124   uint32_t status;
125
126   /**
127    * Time when the sevice will be restarted, if applicable
128    * to the current status.
129    */
130   struct GNUNET_TIME_AbsoluteNBO restart_at;
131
132   /**
133    * Time when the sevice was first started, if applicable.
134    */
135   struct GNUNET_TIME_AbsoluteNBO last_started_at;
136 };
137
138 /**
139  * Reply from ARM to client for the
140  * #GNUNET_MESSAGE_TYPE_ARM_LIST request followed by count
141  * '\0' terminated strings. header->size contains the
142  * total size (including all strings).
143  */
144 struct GNUNET_ARM_ListResultMessage
145 {
146   /**
147    * Reply to client, of type is #GNUNET_MESSAGE_TYPE_ARM_LIST_RESULT,
148    * with an ID.
149    */
150   struct GNUNET_ARM_Message arm_msg;
151
152   /**
153    * Number of 'struct GNUNET_ARM_ServiceInfoMessage' that
154    * are at the end of this message.
155    */
156   uint16_t count;
157
158   /* struct GNUNET_ARM_ServiceInfoMessage[count]; */
159   /* pool of 0-terminated strings */
160 };
161
162 GNUNET_NETWORK_STRUCT_END
163
164 #endif