VirtualBox

source: vbox/trunk/src/VBox/Frontends/VBoxAutostart/VBoxAutostart.h@ 95255

Last change on this file since 95255 was 95255, checked in by vboxsync, 2 years ago

FE/VBoxAutoStart: Fixed more RTEXITCODE vs. int return codes in autostartSetup(). Added some docs.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.0 KB
Line 
1/* $Id: VBoxAutostart.h 95255 2022-06-13 09:55:08Z vboxsync $ */
2/** @file
3 * VBoxAutostart - VirtualBox Autostart service.
4 */
5
6/*
7 * Copyright (C) 2012-2022 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef VBOX_INCLUDED_SRC_VBoxAutostart_VBoxAutostart_h
19#define VBOX_INCLUDED_SRC_VBoxAutostart_VBoxAutostart_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24/*******************************************************************************
25* Header Files *
26*******************************************************************************/
27#include <iprt/getopt.h>
28#include <iprt/types.h>
29
30#include <VBox/cdefs.h>
31#include <VBox/types.h>
32
33#include <VBox/com/com.h>
34#include <VBox/com/VirtualBox.h>
35
36/*******************************************************************************
37* Constants And Macros, Structures and Typedefs *
38*******************************************************************************/
39
40/**
41 * Config AST node types.
42 */
43typedef enum CFGASTNODETYPE
44{
45 /** Invalid. */
46 CFGASTNODETYPE_INVALID = 0,
47 /** Key/Value pair. */
48 CFGASTNODETYPE_KEYVALUE,
49 /** Compound type. */
50 CFGASTNODETYPE_COMPOUND,
51 /** List type. */
52 CFGASTNODETYPE_LIST,
53 /** 32bit hack. */
54 CFGASTNODETYPE_32BIT_HACK = 0x7fffffff
55} CFGASTNODETYPE;
56/** Pointer to a config AST node type. */
57typedef CFGASTNODETYPE *PCFGASTNODETYPE;
58/** Pointer to a const config AST node type. */
59typedef const CFGASTNODETYPE *PCCFGASTNODETYPE;
60
61/**
62 * Config AST.
63 */
64typedef struct CFGAST
65{
66 /** AST node type. */
67 CFGASTNODETYPE enmType;
68 /** Key or scope id. */
69 char *pszKey;
70 /** Type dependent data. */
71 union
72 {
73 /** Key value pair. */
74 struct
75 {
76 /** Number of characters in the value - excluding terminator. */
77 size_t cchValue;
78 /** Value string - variable in size. */
79 char aszValue[1];
80 } KeyValue;
81 /** Compound type. */
82 struct
83 {
84 /** Number of AST node entries in the array. */
85 unsigned cAstNodes;
86 /** AST node array - variable in size. */
87 struct CFGAST *apAstNodes[1];
88 } Compound;
89 /** List type. */
90 struct
91 {
92 /** Number of entries in the list. */
93 unsigned cListEntries;
94 /** Array of list entries - variable in size. */
95 char *apszEntries[1];
96 } List;
97 } u;
98} CFGAST, *PCFGAST;
99
100/** Flag whether we are in verbose logging mode. */
101extern bool g_fVerbose;
102/** Handle to the VirtualBox interface. */
103extern ComPtr<IVirtualBox> g_pVirtualBox;
104/** Handle to the session interface. */
105extern ComPtr<ISession> g_pSession;
106/** handle to the VirtualBox interface. */
107extern ComPtr<IVirtualBoxClient> g_pVirtualBoxClient;
108/**
109 * System log type.
110 */
111typedef enum AUTOSTARTLOGTYPE
112{
113 /** Invalid log type. */
114 AUTOSTARTLOGTYPE_INVALID = 0,
115 /** Log info message. */
116 AUTOSTARTLOGTYPE_INFO,
117 /** Log error message. */
118 AUTOSTARTLOGTYPE_ERROR,
119 /** Log warning message. */
120 AUTOSTARTLOGTYPE_WARNING,
121 /** Log verbose message, only if verbose mode is activated. */
122 AUTOSTARTLOGTYPE_VERBOSE,
123 /** Famous 32bit hack. */
124 AUTOSTARTLOGTYPE_32BIT_HACK = 0x7fffffff
125} AUTOSTARTLOGTYPE;
126
127/**
128 * Prints the service header header (product name, version, ++) to stdout.
129 */
130DECLHIDDEN(void) autostartSvcShowHeader(void);
131
132/**
133 * Prints the service version information header to stdout.
134 *
135 * @param fBrief Whether to show brief information or not.
136 */
137DECLHIDDEN(void) autostartSvcShowVersion(bool fBrief);
138
139/**
140 * Log messages to the system and release log.
141 *
142 * @returns nothing.
143 * @param pszMsg Message to log.
144 * @param enmLogType Log type to use.
145 */
146DECLHIDDEN(void) autostartSvcOsLogStr(const char *pszMsg, AUTOSTARTLOGTYPE enmLogType);
147
148/**
149 * Print out progress on the console.
150 *
151 * This runs the main event queue every now and then to prevent piling up
152 * unhandled things (which doesn't cause real problems, just makes things
153 * react a little slower than in the ideal case).
154 */
155DECLHIDDEN(HRESULT) showProgress(ComPtr<IProgress> progress);
156
157/**
158 * Converts the machine state to a human readable string.
159 *
160 * @returns Pointer to the human readable state.
161 * @param enmMachineState Machine state to convert.
162 * @param fShort Flag whether to return a short form.
163 */
164DECLHIDDEN(const char *) machineStateToName(MachineState_T enmMachineState, bool fShort);
165
166/**
167 * Parse the given configuration file and return the interesting config parameters.
168 *
169 * @returns VBox status code.
170 * @param pszFilename The config file to parse.
171 * @param ppCfgAst Where to store the pointer to the root AST node on success.
172 */
173DECLHIDDEN(int) autostartParseConfig(const char *pszFilename, PCFGAST *ppCfgAst);
174
175/**
176 * Destroys the config AST and frees all resources.
177 *
178 * @returns nothing.
179 * @param pCfgAst The config AST.
180 */
181DECLHIDDEN(void) autostartConfigAstDestroy(PCFGAST pCfgAst);
182
183/**
184 * Return the config AST node with the given name or NULL if it doesn't exist.
185 *
186 * @returns Matching config AST node for the given name or NULL if not found.
187 * @param pCfgAst The config ASt to search.
188 * @param pszName The name to search for.
189 */
190DECLHIDDEN(PCFGAST) autostartConfigAstGetByName(PCFGAST pCfgAst, const char *pszName);
191
192/**
193 * Main routine for the autostart daemon.
194 *
195 * @returns VBox status code.
196 * @param pCfgAst Config AST for the startup part of the autostart daemon.
197 */
198DECLHIDDEN(int) autostartStartMain(PCFGAST pCfgAst);
199
200/**
201 * Main routine for the autostart daemon when stopping virtual machines
202 * during system shutdown.
203 *
204 * @returns VBox status code.
205 * @param pCfgAst Config AST for the shutdown part of the autostart daemon.
206 */
207DECLHIDDEN(int) autostartStopMain(PCFGAST pCfgAst);
208
209/**
210 * Logs a verbose message to the appropriate system log and stdout + release log (if configured).
211 *
212 * @param cVerbosity Verbosity level when logging should happen.
213 * @param pszFormat The log string. No trailing newline.
214 * @param ... Format arguments.
215 */
216DECLHIDDEN(void) autostartSvcLogVerboseV(unsigned cVerbosity, const char *pszFormat, va_list va);
217
218/**
219 * Logs a verbose message to the appropriate system log and stdout + release log (if configured).
220 *
221 * @param cVerbosity Verbosity level when logging should happen.
222 * @param pszFormat The log string. No trailing newline.
223 * @param ... Format arguments.
224 */
225DECLHIDDEN(void) autostartSvcLogVerbose(unsigned cVerbosity, const char *pszFormat, ...);
226
227/**
228 * Logs a warning message to the appropriate system log and stdout + release log (if configured).
229 *
230 * @param pszFormat The log string. No trailing newline.
231 * @param ... Format arguments.
232 */
233DECLHIDDEN(void) autostartSvcLogWarningV(const char *pszFormat, va_list va);
234
235/**
236 * Logs a warning message to the appropriate system log and stdout + release log (if configured).
237 *
238 * @param pszFormat The log string. No trailing newline.
239 * @param ... Format arguments.
240 */
241DECLHIDDEN(void) autostartSvcLogWarning(const char *pszFormat, ...);
242
243/**
244 * Logs a info message to the appropriate system log and stdout + release log (if configured).
245 *
246 * @param pszFormat The log string. No trailing newline.
247 * @param ... Format arguments.
248 */
249DECLHIDDEN(void) autostartSvcLogInfoV(const char *pszFormat, va_list va);
250
251/**
252 * Logs a info message to the appropriate system log and stdout + release log (if configured).
253 *
254 * @param pszFormat The log string. No trailing newline.
255 * @param ... Format arguments.
256 */
257DECLHIDDEN(void) autostartSvcLogInfo(const char *pszFormat, ...);
258
259/**
260 * Logs the message to the appropriate system log and stderr + release log (if configured).
261 *
262 * In debug builds this will also put it in the debug log.
263 *
264 * @returns VBox status code.
265 * @param pszFormat The log string. No trailing newline.
266 * @param ... Format arguments.
267 */
268DECLHIDDEN(int) autostartSvcLogErrorV(const char *pszFormat, va_list va);
269
270/**
271 * Logs the message to the appropriate system log and stderr + release log (if configured).
272 *
273 * In debug builds this will also put it in the debug log.
274 *
275 * @returns VBox status code.
276 * @param pszFormat The log string. No trailing newline.
277 * @param ... Format arguments.
278 */
279DECLHIDDEN(int) autostartSvcLogError(const char *pszFormat, ...);
280
281/**
282 * Logs the message to the appropriate system log.
283 *
284 * In debug builds this will also put it in the debug log.
285 *
286 * @returns VBox status code specified by \a rc.
287 * @param pszFormat The log string. No trailing newline.
288 * @param ... Format arguments.
289 *
290 * @note Convenience function to return directly with the specified \a rc.
291 */
292DECLHIDDEN(int) autostartSvcLogErrorRcV(int rc, const char *pszFormat, va_list va);
293
294/**
295 * Logs the error message to the appropriate system log.
296 *
297 * In debug builds this will also put it in the debug log.
298 *
299 * @returns VBox status code specified by \a rc.
300 * @param pszFormat The log string. No trailing newline.
301 * @param ... Format arguments.
302 *
303 * @note Convenience function to return directly with the specified \a rc.
304 */
305DECLHIDDEN(int) autostartSvcLogErrorRc(int rc, const char *pszFormat, ...);
306
307/**
308 * Deals with RTGetOpt failure, bitching in the system log.
309 *
310 * @returns VBox status code specified by \a rc.
311 * @param pszAction The action name.
312 * @param rc The RTGetOpt return value.
313 * @param argc The argument count.
314 * @param argv The argument vector.
315 * @param iArg The argument index.
316 * @param pValue The value returned by RTGetOpt.
317 */
318DECLHIDDEN(int) autostartSvcLogGetOptError(const char *pszAction, int rc, int argc, char **argv, int iArg, PCRTGETOPTUNION pValue);
319
320/**
321 * Bitch about too many arguments (after RTGetOpt stops) in the system log.
322 *
323 * @returns VERR_INVALID_PARAMETER
324 * @param pszAction The action name.
325 * @param argc The argument count.
326 * @param argv The argument vector.
327 * @param iArg The argument index.
328 */
329DECLHIDDEN(int) autostartSvcLogTooManyArgsError(const char *pszAction, int argc, char **argv, int iArg);
330
331/**
332 * Prints an error message to the screen.
333 *
334 * @returns RTEXITCODE
335 * @param pszFormat The message format string.
336 * @param va Format arguments.
337 */
338DECLHIDDEN(RTEXITCODE) autostartSvcDisplayErrorV(const char *pszFormat, va_list va);
339
340/**
341 * Prints an error message to the screen.
342 *
343 * @returns RTEXITCODE
344 * @param pszFormat The message format string.
345 * @param ... Format arguments.
346 */
347DECLHIDDEN(RTEXITCODE) autostartSvcDisplayError(const char *pszFormat, ...);
348
349/**
350 * Deals with RTGetOpt failure, i.e. an syntax error.
351 *
352 * @returns RTEXITCODE_SYNTAX
353 * @param pszAction The action name.
354 * @param rc The RTGetOpt return value.
355 * @param pValue The value returned by RTGetOpt.
356 */
357DECLHIDDEN(RTEXITCODE) autostartSvcDisplayGetOptError(const char *pszAction, int rc, PCRTGETOPTUNION pValue);
358
359/**
360 * Starts the autostart environment by initializing all needed (global) objects.
361 *
362 * @returns VBox status code.
363 *
364 * @note This currently does NOT support multiple instances, be aware of this!
365 */
366DECLHIDDEN(int) autostartSetup(void);
367
368/**
369 * Stops the autostart environment.
370 *
371 * @note This currently does NOT support multiple instances, be aware of this!
372 */
373DECLHIDDEN(void) autostartShutdown(void);
374
375#endif /* !VBOX_INCLUDED_SRC_VBoxAutostart_VBoxAutostart_h */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette