[42527] | 1 | /* $Id: VBoxAutostart.h 69500 2017-10-28 15:14:05Z vboxsync $ */
|
---|
| 2 | /** @file
|
---|
| 3 | * VBoxAutostart - VirtualBox Autostart service.
|
---|
| 4 | */
|
---|
| 5 |
|
---|
| 6 | /*
|
---|
[69500] | 7 | * Copyright (C) 2012-2017 Oracle Corporation
|
---|
[42527] | 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 __VBoxAutostart_h__
|
---|
| 19 | #define __VBoxAutostart_h__
|
---|
| 20 |
|
---|
| 21 | /*******************************************************************************
|
---|
| 22 | * Header Files *
|
---|
| 23 | *******************************************************************************/
|
---|
[43967] | 24 | #include <iprt/getopt.h>
|
---|
| 25 | #include <iprt/types.h>
|
---|
| 26 |
|
---|
[42527] | 27 | #include <VBox/cdefs.h>
|
---|
| 28 | #include <VBox/types.h>
|
---|
| 29 |
|
---|
| 30 | #include <VBox/com/com.h>
|
---|
| 31 | #include <VBox/com/VirtualBox.h>
|
---|
| 32 |
|
---|
[42732] | 33 | /*******************************************************************************
|
---|
| 34 | * Constants And Macros, Structures and Typedefs *
|
---|
| 35 | *******************************************************************************/
|
---|
| 36 |
|
---|
| 37 | /**
|
---|
| 38 | * Config AST node types.
|
---|
| 39 | */
|
---|
| 40 | typedef enum CFGASTNODETYPE
|
---|
| 41 | {
|
---|
| 42 | /** Invalid. */
|
---|
| 43 | CFGASTNODETYPE_INVALID = 0,
|
---|
| 44 | /** Key/Value pair. */
|
---|
| 45 | CFGASTNODETYPE_KEYVALUE,
|
---|
| 46 | /** Compound type. */
|
---|
| 47 | CFGASTNODETYPE_COMPOUND,
|
---|
| 48 | /** List type. */
|
---|
| 49 | CFGASTNODETYPE_LIST,
|
---|
| 50 | /** 32bit hack. */
|
---|
| 51 | CFGASTNODETYPE_32BIT_HACK = 0x7fffffff
|
---|
| 52 | } CFGASTNODETYPE;
|
---|
| 53 | /** Pointer to a config AST node type. */
|
---|
| 54 | typedef CFGASTNODETYPE *PCFGASTNODETYPE;
|
---|
| 55 | /** Pointer to a const config AST node type. */
|
---|
| 56 | typedef const CFGASTNODETYPE *PCCFGASTNODETYPE;
|
---|
| 57 |
|
---|
| 58 | /**
|
---|
| 59 | * Config AST.
|
---|
| 60 | */
|
---|
| 61 | typedef struct CFGAST
|
---|
| 62 | {
|
---|
| 63 | /** AST node type. */
|
---|
| 64 | CFGASTNODETYPE enmType;
|
---|
| 65 | /** Key or scope id. */
|
---|
| 66 | char *pszKey;
|
---|
| 67 | /** Type dependent data. */
|
---|
| 68 | union
|
---|
| 69 | {
|
---|
| 70 | /** Key value pair. */
|
---|
| 71 | struct
|
---|
| 72 | {
|
---|
| 73 | /** Number of characters in the value - excluding terminator. */
|
---|
| 74 | size_t cchValue;
|
---|
| 75 | /** Value string - variable in size. */
|
---|
| 76 | char aszValue[1];
|
---|
| 77 | } KeyValue;
|
---|
| 78 | /** Compound type. */
|
---|
| 79 | struct
|
---|
| 80 | {
|
---|
| 81 | /** Number of AST node entries in the array. */
|
---|
| 82 | unsigned cAstNodes;
|
---|
| 83 | /** AST node array - variable in size. */
|
---|
| 84 | struct CFGAST *apAstNodes[1];
|
---|
| 85 | } Compound;
|
---|
| 86 | /** List type. */
|
---|
| 87 | struct
|
---|
| 88 | {
|
---|
| 89 | /** Number of entries in the list. */
|
---|
| 90 | unsigned cListEntries;
|
---|
| 91 | /** Array of list entries - variable in size. */
|
---|
| 92 | char *apszEntries[1];
|
---|
| 93 | } List;
|
---|
| 94 | } u;
|
---|
| 95 | } CFGAST, *PCFGAST;
|
---|
| 96 |
|
---|
[42527] | 97 | /** Flag whether we are in verbose logging mode. */
|
---|
[43967] | 98 | extern bool g_fVerbose;
|
---|
[42527] | 99 | /** Handle to the VirtualBox interface. */
|
---|
[43967] | 100 | extern ComPtr<IVirtualBox> g_pVirtualBox;
|
---|
[42527] | 101 | /** Handle to the session interface. */
|
---|
[43967] | 102 | extern ComPtr<ISession> g_pSession;
|
---|
| 103 | /** handle to the VirtualBox interface. */
|
---|
| 104 | extern ComPtr<IVirtualBoxClient> g_pVirtualBoxClient;
|
---|
[42527] | 105 | /**
|
---|
[43967] | 106 | * System log type.
|
---|
[42527] | 107 | */
|
---|
[43967] | 108 | typedef enum AUTOSTARTLOGTYPE
|
---|
| 109 | {
|
---|
| 110 | /** Invalid log type. */
|
---|
| 111 | AUTOSTARTLOGTYPE_INVALID = 0,
|
---|
| 112 | /** Log info message. */
|
---|
| 113 | AUTOSTARTLOGTYPE_INFO,
|
---|
| 114 | /** Log error message. */
|
---|
| 115 | AUTOSTARTLOGTYPE_ERROR,
|
---|
| 116 | /** Log warning message. */
|
---|
| 117 | AUTOSTARTLOGTYPE_WARNING,
|
---|
| 118 | /** Log verbose message, only if verbose mode is activated. */
|
---|
| 119 | AUTOSTARTLOGTYPE_VERBOSE,
|
---|
| 120 | /** Famous 32bit hack. */
|
---|
| 121 | AUTOSTARTLOGTYPE_32BIT_HACK = 0x7fffffff
|
---|
| 122 | } AUTOSTARTLOGTYPE;
|
---|
[42527] | 123 |
|
---|
| 124 | /**
|
---|
[43967] | 125 | * Log messages to the system and release log.
|
---|
[42527] | 126 | *
|
---|
| 127 | * @returns nothing.
|
---|
[43967] | 128 | * @param pszMsg Message to log.
|
---|
| 129 | * @param enmLogType Log type to use.
|
---|
[42527] | 130 | */
|
---|
[43967] | 131 | DECLHIDDEN(void) autostartSvcOsLogStr(const char *pszMsg, AUTOSTARTLOGTYPE enmLogType);
|
---|
[42527] | 132 |
|
---|
| 133 | /**
|
---|
[43378] | 134 | * Print out progress on the console.
|
---|
| 135 | *
|
---|
| 136 | * This runs the main event queue every now and then to prevent piling up
|
---|
| 137 | * unhandled things (which doesn't cause real problems, just makes things
|
---|
| 138 | * react a little slower than in the ideal case).
|
---|
| 139 | */
|
---|
| 140 | DECLHIDDEN(HRESULT) showProgress(ComPtr<IProgress> progress);
|
---|
| 141 |
|
---|
| 142 | /**
|
---|
| 143 | * Converts the machine state to a human readable string.
|
---|
| 144 | *
|
---|
| 145 | * @returns Pointer to the human readable state.
|
---|
| 146 | * @param enmMachineState Machine state to convert.
|
---|
| 147 | * @param fShort Flag whether to return a short form.
|
---|
| 148 | */
|
---|
| 149 | DECLHIDDEN(const char *) machineStateToName(MachineState_T enmMachineState, bool fShort);
|
---|
| 150 |
|
---|
| 151 | /**
|
---|
[42527] | 152 | * Parse the given configuration file and return the interesting config parameters.
|
---|
| 153 | *
|
---|
| 154 | * @returns VBox status code.
|
---|
| 155 | * @param pszFilename The config file to parse.
|
---|
[42732] | 156 | * @param ppCfgAst Where to store the pointer to the root AST node on success.
|
---|
[42527] | 157 | */
|
---|
[42732] | 158 | DECLHIDDEN(int) autostartParseConfig(const char *pszFilename, PCFGAST *ppCfgAst);
|
---|
[42527] | 159 |
|
---|
| 160 | /**
|
---|
[42732] | 161 | * Destroys the config AST and frees all resources.
|
---|
| 162 | *
|
---|
| 163 | * @returns nothing.
|
---|
| 164 | * @param pCfgAst The config AST.
|
---|
| 165 | */
|
---|
| 166 | DECLHIDDEN(void) autostartConfigAstDestroy(PCFGAST pCfgAst);
|
---|
| 167 |
|
---|
| 168 | /**
|
---|
| 169 | * Return the config AST node with the given name or NULL if it doesn't exist.
|
---|
| 170 | *
|
---|
| 171 | * @returns Matching config AST node for the given name or NULL if not found.
|
---|
| 172 | * @param pCfgAst The config ASt to search.
|
---|
| 173 | * @param pszName The name to search for.
|
---|
| 174 | */
|
---|
| 175 | DECLHIDDEN(PCFGAST) autostartConfigAstGetByName(PCFGAST pCfgAst, const char *pszName);
|
---|
| 176 |
|
---|
| 177 | /**
|
---|
[42527] | 178 | * Main routine for the autostart daemon.
|
---|
| 179 | *
|
---|
| 180 | * @returns exit status code.
|
---|
[42732] | 181 | * @param pCfgAst Config AST for the startup part of the autostart daemon.
|
---|
[42527] | 182 | */
|
---|
[42732] | 183 | DECLHIDDEN(RTEXITCODE) autostartStartMain(PCFGAST pCfgAst);
|
---|
[42527] | 184 |
|
---|
| 185 | /**
|
---|
| 186 | * Main routine for the autostart daemon when stopping virtual machines
|
---|
| 187 | * during system shutdown.
|
---|
| 188 | *
|
---|
| 189 | * @returns exit status code.
|
---|
[42732] | 190 | * @param pCfgAst Config AST for the shutdown part of the autostart daemon.
|
---|
[42527] | 191 | */
|
---|
[42732] | 192 | DECLHIDDEN(RTEXITCODE) autostartStopMain(PCFGAST pCfgAst);
|
---|
[42527] | 193 |
|
---|
[43967] | 194 | /**
|
---|
| 195 | * Logs a verbose message to the appropriate system log.
|
---|
| 196 | *
|
---|
| 197 | * @param pszFormat The log string. No trailing newline.
|
---|
| 198 | * @param ... Format arguments.
|
---|
| 199 | */
|
---|
| 200 | DECLHIDDEN(void) autostartSvcLogVerboseV(const char *pszFormat, va_list va);
|
---|
| 201 |
|
---|
| 202 | /**
|
---|
| 203 | * Logs a verbose message to the appropriate system log.
|
---|
| 204 | *
|
---|
| 205 | * @param pszFormat The log string. No trailing newline.
|
---|
| 206 | * @param ... Format arguments.
|
---|
| 207 | */
|
---|
| 208 | DECLHIDDEN(void) autostartSvcLogVerbose(const char *pszFormat, ...);
|
---|
| 209 |
|
---|
| 210 | /**
|
---|
| 211 | * Logs a warning message to the appropriate system log.
|
---|
| 212 | *
|
---|
| 213 | * @param pszFormat The log string. No trailing newline.
|
---|
| 214 | * @param ... Format arguments.
|
---|
| 215 | */
|
---|
| 216 | DECLHIDDEN(void) autostartSvcLogWarningV(const char *pszFormat, va_list va);
|
---|
| 217 |
|
---|
| 218 | /**
|
---|
| 219 | * Logs a warning message to the appropriate system log.
|
---|
| 220 | *
|
---|
| 221 | * @param pszFormat The log string. No trailing newline.
|
---|
| 222 | * @param ... Format arguments.
|
---|
| 223 | */
|
---|
| 224 | DECLHIDDEN(void) autostartSvcLogWarning(const char *pszFormat, ...);
|
---|
| 225 |
|
---|
| 226 | /**
|
---|
| 227 | * Logs a info message to the appropriate system log.
|
---|
| 228 | *
|
---|
| 229 | * @param pszFormat The log string. No trailing newline.
|
---|
| 230 | * @param ... Format arguments.
|
---|
| 231 | */
|
---|
| 232 | DECLHIDDEN(void) autostartSvcLogInfoV(const char *pszFormat, va_list va);
|
---|
| 233 |
|
---|
| 234 | /**
|
---|
| 235 | * Logs a info message to the appropriate system log.
|
---|
| 236 | *
|
---|
| 237 | * @param pszFormat The log string. No trailing newline.
|
---|
| 238 | * @param ... Format arguments.
|
---|
| 239 | */
|
---|
| 240 | DECLHIDDEN(void) autostartSvcLogInfo(const char *pszFormat, ...);
|
---|
| 241 |
|
---|
| 242 | /**
|
---|
| 243 | * Logs the message to the appropriate system log.
|
---|
| 244 | *
|
---|
| 245 | * In debug builds this will also put it in the debug log.
|
---|
| 246 | *
|
---|
| 247 | * @param pszFormat The log string. No trailing newline.
|
---|
| 248 | * @param ... Format arguments.
|
---|
| 249 | *
|
---|
| 250 | * @todo This should later be replaced by the release logger and callback destination(s).
|
---|
| 251 | */
|
---|
| 252 | DECLHIDDEN(void) autostartSvcLogErrorV(const char *pszFormat, va_list va);
|
---|
| 253 |
|
---|
| 254 | /**
|
---|
| 255 | * Logs the error message to the appropriate system log.
|
---|
| 256 | *
|
---|
| 257 | * In debug builds this will also put it in the debug log.
|
---|
| 258 | *
|
---|
| 259 | * @param pszFormat The log string. No trailing newline.
|
---|
| 260 | * @param ... Format arguments.
|
---|
| 261 | *
|
---|
| 262 | * @todo This should later be replaced by the release logger and callback destination(s).
|
---|
| 263 | */
|
---|
| 264 | DECLHIDDEN(void) autostartSvcLogError(const char *pszFormat, ...);
|
---|
| 265 |
|
---|
| 266 | /**
|
---|
| 267 | * Deals with RTGetOpt failure, bitching in the system log.
|
---|
| 268 | *
|
---|
| 269 | * @returns 1
|
---|
| 270 | * @param pszAction The action name.
|
---|
| 271 | * @param rc The RTGetOpt return value.
|
---|
| 272 | * @param argc The argument count.
|
---|
| 273 | * @param argv The argument vector.
|
---|
| 274 | * @param iArg The argument index.
|
---|
| 275 | * @param pValue The value returned by RTGetOpt.
|
---|
| 276 | */
|
---|
| 277 | DECLHIDDEN(RTEXITCODE) autostartSvcLogGetOptError(const char *pszAction, int rc, int argc, char **argv, int iArg, PCRTGETOPTUNION pValue);
|
---|
| 278 |
|
---|
| 279 | /**
|
---|
| 280 | * Bitch about too many arguments (after RTGetOpt stops) in the system log.
|
---|
| 281 | *
|
---|
| 282 | * @returns 1
|
---|
| 283 | * @param pszAction The action name.
|
---|
| 284 | * @param argc The argument count.
|
---|
| 285 | * @param argv The argument vector.
|
---|
| 286 | * @param iArg The argument index.
|
---|
| 287 | */
|
---|
| 288 | DECLHIDDEN(RTEXITCODE) autostartSvcLogTooManyArgsError(const char *pszAction, int argc, char **argv, int iArg);
|
---|
| 289 |
|
---|
| 290 | /**
|
---|
| 291 | * Prints an error message to the screen.
|
---|
| 292 | *
|
---|
| 293 | * @param pszFormat The message format string.
|
---|
| 294 | * @param va Format arguments.
|
---|
| 295 | */
|
---|
| 296 | DECLHIDDEN(void) autostartSvcDisplayErrorV(const char *pszFormat, va_list va);
|
---|
| 297 |
|
---|
| 298 | /**
|
---|
| 299 | * Prints an error message to the screen.
|
---|
| 300 | *
|
---|
| 301 | * @param pszFormat The message format string.
|
---|
| 302 | * @param ... Format arguments.
|
---|
| 303 | */
|
---|
| 304 | DECLHIDDEN(void) autostartSvcDisplayError(const char *pszFormat, ...);
|
---|
| 305 |
|
---|
| 306 | /**
|
---|
| 307 | * Deals with RTGetOpt failure.
|
---|
| 308 | *
|
---|
| 309 | * @returns 1
|
---|
| 310 | * @param pszAction The action name.
|
---|
| 311 | * @param rc The RTGetOpt return value.
|
---|
| 312 | * @param argc The argument count.
|
---|
| 313 | * @param argv The argument vector.
|
---|
| 314 | * @param iArg The argument index.
|
---|
| 315 | * @param pValue The value returned by RTGetOpt.
|
---|
| 316 | */
|
---|
| 317 | DECLHIDDEN(RTEXITCODE) autostartSvcDisplayGetOptError(const char *pszAction, int rc, int argc, char **argv, int iArg, PCRTGETOPTUNION pValue);
|
---|
| 318 |
|
---|
| 319 | /**
|
---|
| 320 | * Bitch about too many arguments (after RTGetOpt stops).
|
---|
| 321 | *
|
---|
| 322 | * @returns RTEXITCODE_FAILURE
|
---|
| 323 | * @param pszAction The action name.
|
---|
| 324 | * @param argc The argument count.
|
---|
| 325 | * @param argv The argument vector.
|
---|
| 326 | * @param iArg The argument index.
|
---|
| 327 | */
|
---|
| 328 | DECLHIDDEN(RTEXITCODE) autostartSvcDisplayTooManyArgsError(const char *pszAction, int argc, char **argv, int iArg);
|
---|
| 329 |
|
---|
| 330 | DECLHIDDEN(int) autostartSetup();
|
---|
| 331 |
|
---|
| 332 | DECLHIDDEN(void) autostartShutdown();
|
---|
| 333 |
|
---|
[42527] | 334 | #endif /* __VBoxAutostart_h__ */
|
---|
| 335 |
|
---|