2 Bacula(R) - The Network Backup Solution
4 Copyright (C) 2000-2017 Kern Sibbald
6 The original author of Bacula is Kern Sibbald, with contributions
7 from many others, a complete list can be found in the file AUTHORS.
9 You may use this file and others of this release according to the
10 license defined in the LICENSE file, which includes the Affero General
11 Public License, v3.0 ("AGPLv3") and some additional permissions and
12 terms pursuant to its AGPLv3 Section 7.
14 This notice must be preserved when any source code is
15 conveyed and/or propagated.
17 Bacula(R) is a registered trademark of Kern Sibbald.
20 * Sample Plugin program
22 * Kern Sibbald, October 2007
25 #include "dir_plugins.h"
31 #define PLUGIN_LICENSE "AGPLv3"
32 #define PLUGIN_AUTHOR "Kern Sibbald"
33 #define PLUGIN_DATE "January 2008"
34 #define PLUGIN_VERSION "1"
35 #define PLUGIN_DESCRIPTION "Test Director Daemon Plugin"
37 /* Forward referenced functions */
38 static bRC newPlugin(bpContext *ctx);
39 static bRC freePlugin(bpContext *ctx);
40 static bRC getPluginValue(bpContext *ctx, pDirVariable var, void *value);
41 static bRC setPluginValue(bpContext *ctx, pDirVariable var, void *value);
42 static bRC handlePluginEvent(bpContext *ctx, bDirEvent *event, void *value);
45 /* Pointers to Bacula functions */
46 static bDirFuncs *bfuncs = NULL;
47 static bDirInfo *binfo = NULL;
49 static pDirInfo pluginInfo = {
51 DIR_PLUGIN_INTERFACE_VERSION,
60 static pDirFuncs pluginFuncs = {
62 DIR_PLUGIN_INTERFACE_VERSION,
64 /* Entry points into plugin */
65 newPlugin, /* new plugin instance */
66 freePlugin, /* free plugin instance */
72 bRC loadPlugin(bDirInfo *lbinfo, bDirFuncs *lbfuncs, pDirInfo **pinfo, pDirFuncs **pfuncs)
74 bfuncs = lbfuncs; /* set Bacula funct pointers */
76 printf("plugin: Loaded: size=%d version=%d\n", bfuncs->size, bfuncs->version);
78 *pinfo = &pluginInfo; /* return pointer to our info */
79 *pfuncs = &pluginFuncs; /* return pointer to our functions */
86 printf("plugin: Unloaded\n");
90 static bRC newPlugin(bpContext *ctx)
93 bfuncs->getBaculaValue(ctx, bDirVarJobId, (void *)&JobId);
94 printf("plugin: newPlugin JobId=%d\n", JobId);
95 bfuncs->registerBaculaEvents(ctx, 1, 2, 0);
99 static bRC freePlugin(bpContext *ctx)
102 bfuncs->getBaculaValue(ctx, bDirVarJobId, (void *)&JobId);
103 printf("plugin: freePlugin JobId=%d\n", JobId);
107 static bRC getPluginValue(bpContext *ctx, pDirVariable var, void *value)
109 printf("plugin: getPluginValue var=%d\n", var);
113 static bRC setPluginValue(bpContext *ctx, pDirVariable var, void *value)
115 printf("plugin: setPluginValue var=%d\n", var);
119 static bRC handlePluginEvent(bpContext *ctx, bDirEvent *event, void *value)
123 switch (event->eventType) {
124 case bDirEventJobStart:
125 printf("plugin: HandleEvent JobStart\n");
127 case bDirEventJobEnd:
128 printf("plugin: HandleEvent JobEnd\n");
129 bfuncs->getBaculaValue(ctx, bDirVarJob, (void *)&name);
130 printf("plugin: bDirVarJob=%s\n", name);
131 bfuncs->getBaculaValue(ctx, bDirVarJobId, (void *)&val);
132 printf("plugin: bDirVarJobId=%d\n", val);
133 bfuncs->getBaculaValue(ctx, bDirVarType, (void *)&val);
134 printf("plugin: bDirVarType=%c\n", val);
135 bfuncs->getBaculaValue(ctx, bDirVarLevel, (void *)&val);
136 printf("plugin: bDirVarLevel=%c\n", val);
137 bfuncs->getBaculaValue(ctx, bDirVarClient, (void *)&name);
138 printf("plugin: bDirVarClient=%s\n", name);
139 bfuncs->getBaculaValue(ctx, bDirVarCatalog, (void *)&name);
140 printf("plugin: bDirVarCatalog=%s\n", name);
141 bfuncs->getBaculaValue(ctx, bDirVarPool, (void *)&name);
142 printf("plugin: bDirVarPool=%s\n", name);
143 bfuncs->getBaculaValue(ctx, bDirVarStorage, (void *)&name);
144 printf("plugin: bDirVarStorage=%s\n", name);
145 bfuncs->getBaculaValue(ctx, bDirVarJobErrors, (void *)&val);
146 printf("plugin: bDirVarJobErrors=%d\n", val);
147 bfuncs->getBaculaValue(ctx, bDirVarJobFiles, (void *)&val);
148 printf("plugin: bDirVarJobFiles=%d\n", val);
149 bfuncs->getBaculaValue(ctx, bDirVarNumVols, (void *)&val);
150 printf("plugin: bDirVarNumVols=%d\n", val);
154 bfuncs->getBaculaValue(ctx, bDirVarJobName, (void *)&name);
155 printf("Job Name=%s\n", name);
156 bfuncs->JobMessage(ctx, __FILE__, __LINE__, M_INFO, 0, "JobMesssage message");
157 bfuncs->DebugMessage(ctx, __FILE__, __LINE__, 1, "DebugMesssage message");