open-vm-tools 10.3.10
plugin.h
Go to the documentation of this file.
1/*********************************************************
2 * Copyright (C) 2008-2018 VMware, Inc. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License as published
6 * by the Free Software Foundation version 2.1 and no later version.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
10 * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public
11 * License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
16 *
17 *********************************************************/
18
19#ifndef _VMWARE_TOOLS_PLUGIN_H_
20#define _VMWARE_TOOLS_PLUGIN_H_
21
32#include <glib.h>
33#if defined(G_PLATFORM_WIN32)
34# include <windows.h>
35# include <objbase.h>
36#endif
37#include "vmware/guestrpc/capabilities.h"
39#include "vmware/tools/utils.h"
40
49#define VMTOOLSAPP_ERROR(ctx, err) do { \
50 ASSERT((err) != 0); \
51 (ctx)->errorCode = (err); \
52 g_main_loop_quit((ctx)->mainLoop); \
53} while (0)
54
55
65#define VMTOOLSAPP_ATTACH_SOURCE(ctx, src, cb, data, destroy) do { \
66 GSource *__src = (src); \
67 g_source_set_callback(__src, (GSourceFunc) (cb), (data), (destroy)); \
68 g_source_attach(__src, g_main_loop_get_context((ctx)->mainLoop)); \
69} while (0)
70
75#define TOOLS_IS_MAIN_SERVICE(ctx) (strcmp((ctx)->name, \
76 VMTOOLS_GUEST_SERVICE) == 0)
77
82#define TOOLS_IS_USER_SERVICE(ctx) (strcmp((ctx)->name, \
83 VMTOOLS_USER_SERVICE) == 0)
84
85/* Indentation levels for the state log function below. */
86#define TOOLS_STATE_LOG_ROOT 0
87#define TOOLS_STATE_LOG_CONTAINER 1
88#define TOOLS_STATE_LOG_PLUGIN 2
89
100static inline void
101ToolsCore_LogState(guint level,
102 const char *fmt,
103 ...)
104{
105 gchar *indented = g_strdup_printf("%*s%s", 3 * level, "", fmt);
106
107 va_list args;
108 va_start(args, fmt);
109 g_logv("state", G_LOG_LEVEL_INFO, indented, args);
110 va_end(args);
111
112 g_free(indented);
113}
114
115
127#define TOOLS_CORE_SIG_CAPABILITIES "tcs_capabilities"
128
136#define TOOLS_CORE_SIG_CONF_RELOAD "tcs_conf_reload"
137
147#define TOOLS_CORE_SIG_DUMP_STATE "tcs_dump_state"
148
156#define TOOLS_CORE_SIG_RESET "tcs_reset"
157
170#define TOOLS_CORE_SIG_SET_OPTION "tcs_set_option"
171
179#define TOOLS_CORE_SIG_SHUTDOWN "tcs_shutdown"
180
181#if defined(G_PLATFORM_WIN32)
182
209#define TOOLS_CORE_SIG_SERVICE_CONTROL "tcs_service_control"
210
211#endif
212
220#define TOOLS_CORE_PROP_CTX "tcs_app_ctx"
221
222
232typedef enum {
233 TOOLS_CORE_API_V1 = 0x1,
235
236
241typedef struct ToolsAppCtx {
245 const gchar *name;
247 gboolean isVMware;
251 GMainLoop *mainLoop;
253 RpcChannel *rpc;
255 GKeyFile *config;
256#if defined(G_PLATFORM_WIN32)
258 gboolean comInitialized;
259#else
265 const char **envp;
266#endif
273 gpointer serviceObj;
275
276#if defined(G_PLATFORM_WIN32)
284G_INLINE_FUNC gboolean
285ToolsCore_InitializeCOM(ToolsAppCtx *ctx)
286{
287 if (!ctx->comInitialized) {
288 HRESULT ret = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
289 ctx->comInitialized = SUCCEEDED(ret);
290 if (!ctx->comInitialized) {
291 g_log(ctx->name, G_LOG_LEVEL_WARNING,
292 "COM initialization failed(0x%x)\n", ret);
293 }
294 }
295 return ctx->comInitialized;
296}
297#endif
298
299
300/* Capabilities. */
301
303typedef enum {
304 TOOLS_CAP_OLD = 0,
305 TOOLS_CAP_OLD_NOVAL = 1,
306 TOOLS_CAP_NEW = 2
308
318typedef struct ToolsAppCapability {
325 const gchar *name;
330 GuestCapabilities index;
332 guint value;
334
335
336/* Application registration. */
337
339typedef enum {
361
362
363struct ToolsPluginData;
364
373typedef struct ToolsAppProvider {
375 const gchar *name;
384 size_t regSize;
394 void (*activate)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov, GError **err);
406 gboolean (*registerApp)(ToolsAppCtx *ctx,
407 struct ToolsAppProvider *prov,
408 struct ToolsPluginData *plugin,
409 gpointer reg);
420 void (*shutdown)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov);
433 void (*dumpState)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov, gpointer reg);
435
436
447typedef struct ToolsAppReg {
448 ToolsAppType type;
449 GArray *data;
451
452
466typedef struct ToolsServiceProperty {
467 const char *name;
469
470
480typedef struct ToolsPluginSignalCb {
481 const gchar *signame;
482 gpointer callback;
483 gpointer clientData;
485
486
501typedef struct ToolsPluginData {
503 char const *name;
508 GArray *regs;
539 gboolean (*errorCb)(ToolsAppCtx *ctx,
540 ToolsAppType type,
541 gpointer data,
542 struct ToolsPluginData *plugin);
544 gpointer _private;
546
552#if defined(G_PLATFORM_WIN32)
553# define TOOLS_MODULE_EXPORT VMTOOLS_EXTERN_C __declspec(dllexport)
554#elif defined(GCC_EXPLICIT_EXPORT)
555# define TOOLS_MODULE_EXPORT VMTOOLS_EXTERN_C __attribute__((visibility("default")))
556#else
557# define TOOLS_MODULE_EXPORT VMTOOLS_EXTERN_C
558#endif
559
571typedef ToolsPluginData *(*ToolsPluginOnLoad)(ToolsAppCtx *ctx);
572
575#endif /* _VMWARE_TOOLS_PLUGIN_H_ */
576
struct ToolsAppCtx ToolsAppCtx
ToolsCapabilityType
Definition: plugin.h:303
struct ToolsPluginSignalCb ToolsPluginSignalCb
struct ToolsAppCapability ToolsAppCapability
struct ToolsAppReg ToolsAppReg
ToolsAppType
Definition: plugin.h:339
struct ToolsAppProvider ToolsAppProvider
ToolsCoreAPI
Definition: plugin.h:232
struct ToolsServiceProperty ToolsServiceProperty
struct ToolsPluginData ToolsPluginData
@ TOOLS_APP_GUESTRPC
Definition: plugin.h:343
@ TOOLS_APP_SIGNALS
Definition: plugin.h:348
@ TOOLS_SVC_PROPERTY
Definition: plugin.h:359
@ TOOLS_APP_PROVIDER
Definition: plugin.h:354
Definition: plugin.h:318
GuestCapabilities index
Definition: plugin.h:330
const gchar * name
Definition: plugin.h:325
guint value
Definition: plugin.h:332
ToolsCapabilityType type
Definition: plugin.h:320
Definition: plugin.h:241
ToolsCoreAPI version
Definition: plugin.h:243
GKeyFile * config
Definition: plugin.h:255
GMainLoop * mainLoop
Definition: plugin.h:251
RpcChannel * rpc
Definition: plugin.h:253
int uinputFD
Definition: plugin.h:263
int blockFD
Definition: plugin.h:261
const char ** envp
Definition: plugin.h:265
const gchar * name
Definition: plugin.h:245
gpointer serviceObj
Definition: plugin.h:273
gboolean isVMware
Definition: plugin.h:247
int errorCode
Definition: plugin.h:249
Definition: plugin.h:373
void(* shutdown)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov)
Definition: plugin.h:420
const gchar * name
Definition: plugin.h:375
size_t regSize
Definition: plugin.h:384
gboolean(* registerApp)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov, struct ToolsPluginData *plugin, gpointer reg)
Definition: plugin.h:406
void(* dumpState)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov, gpointer reg)
Definition: plugin.h:433
void(* activate)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov, GError **err)
Definition: plugin.h:394
ToolsAppType regType
Definition: plugin.h:382
Definition: plugin.h:447
Definition: plugin.h:501
char const * name
Definition: plugin.h:503
gboolean(* errorCb)(ToolsAppCtx *ctx, ToolsAppType type, gpointer data, struct ToolsPluginData *plugin)
Definition: plugin.h:539
GArray * regs
Definition: plugin.h:508
gpointer _private
Definition: plugin.h:544
Definition: plugin.h:480
Definition: plugin.h:466