]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/filed/fd_plugins.h
Correct new plugin names
[bacula/bacula] / bacula / src / filed / fd_plugins.h
1 /*
2    Bacula® - The Network Backup Solution
3
4    Copyright (C) 2007-2010 Free Software Foundation Europe e.V.
5
6    The main author of Bacula is Kern Sibbald, with contributions from
7    many others, a complete list can be found in the file AUTHORS.
8    This program is Free Software; you can redistribute it and/or
9    modify it under the terms of version two of the GNU General Public
10    License as published by the Free Software Foundation, which is 
11    listed in the file LICENSE.
12
13    This program is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16    General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21    02110-1301, USA.
22
23    Bacula® is a registered trademark of Kern Sibbald.
24    The licensor of Bacula is the Free Software Foundation Europe
25    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
26    Switzerland, email:ftf@fsfeurope.org.
27 */
28 /*
29  * Application Programming Interface (API) definition for Bacula Plugins
30  *
31  * Kern Sibbald, October 2007
32  *
33  */
34  
35 #ifndef __FD_PLUGINS_H 
36 #define __FD_PLUGINS_H
37
38 #ifndef _BACULA_H
39 #ifdef __cplusplus
40 /* Workaround for SGI IRIX 6.5 */
41 #define _LANGUAGE_C_PLUS_PLUS 1
42 #endif
43 #define _REENTRANT    1
44 #define _THREAD_SAFE  1
45 #define _POSIX_PTHREAD_SEMANTICS 1
46 #define _FILE_OFFSET_BITS 64
47 #define _LARGEFILE_SOURCE 1
48 #define _LARGE_FILES 1
49 #endif  /* ! _BACULA_H */
50
51 #include <sys/types.h>
52
53 #if defined(HAVE_WIN32)
54 #if defined(HAVE_MINGW)
55 #include "mingwconfig.h"
56 #else
57 #include "winconfig.h"
58 #endif
59 #else  /* !HAVE_WIN32 */
60 #ifndef __CONFIG_H
61 #include "config.h"
62 #define __CONFIG_H
63 #endif
64 #endif
65
66 #include "bc_types.h"
67 #include "lib/plugins.h"
68 #include <sys/stat.h>
69 #ifdef HAVE_WIN32
70 #include "../win32/filed/vss.h"
71 #endif
72
73 /*
74  * This packet is used for the restore objects
75  *  It is passed to the plugin when restoring
76  *  the object.
77  */
78 struct restore_object_pkt {
79    int32_t pkt_size;                  /* size of this packet */
80    char *object_name;                 /* Object name */
81    char *object;                      /* restore object data to save */
82    int32_t object_type;               /* FT_xx for this file */             
83    int32_t object_len;                /* restore object length */
84    int32_t object_index;              /* restore object index */
85    int32_t stream;                    /* attribute stream id */
86    uint32_t JobId;                    /* JobId object came from */
87    int32_t pkt_end;                   /* end packet sentinel */
88 };
89
90 /*
91  * This packet is used for file save info transfer.
92 */
93 struct save_pkt {
94    int32_t pkt_size;                  /* size of this packet */
95    char *fname;                       /* Full path and filename */
96    char *link;                        /* Link name if any */
97    struct stat statp;                 /* System stat() packet for file */
98    int32_t type;                      /* FT_xx for this file */             
99    uint32_t flags;                    /* Bacula internal flags */
100    bool portable;                     /* set if data format is portable */
101    char *cmd;                         /* command */
102    char *object_name;                 /* Object name to create */
103    char *object;                      /* restore object data to save */
104    int32_t object_len;                /* restore object length */
105    int32_t index;                     /* restore object index */
106    int32_t pkt_end;                   /* end packet sentinel */
107 };
108
109 /*
110  * This packet is used for file restore info transfer.
111 */
112 struct restore_pkt {
113    int32_t pkt_size;                  /* size of this packet */
114    int32_t stream;                    /* attribute stream id */
115    int32_t data_stream;               /* id of data stream to follow */
116    int32_t type;                      /* file type FT */
117    int32_t file_index;                /* file index */
118    int32_t LinkFI;                    /* file index to data if hard link */
119    uid_t uid;                         /* userid */
120    struct stat statp;                 /* decoded stat packet */
121    const char *attrEx;                /* extended attributes if any */
122    const char *ofname;                /* output filename */
123    const char *olname;                /* output link name */
124    const char *where;                 /* where */
125    const char *RegexWhere;            /* regex where */
126    int replace;                       /* replace flag */
127    int create_status;                 /* status from createFile() */
128    int32_t pkt_end;                   /* end packet sentinel */
129 };
130
131 enum {
132    IO_OPEN = 1,
133    IO_READ = 2,
134    IO_WRITE = 3,
135    IO_CLOSE = 4,
136    IO_SEEK = 5
137 };
138
139 struct io_pkt {
140    int32_t pkt_size;                  /* Size of this packet */
141    int32_t func;                      /* Function code */
142    int32_t count;                     /* read/write count */
143    int32_t flags;                     /* Open flags */
144    mode_t mode;                       /* permissions for created files */
145    char *buf;                         /* read/write buffer */
146    const char *fname;                 /* open filename */
147    int32_t status;                    /* return status */
148    int32_t io_errno;                  /* errno code */  
149    int32_t lerror;                    /* Win32 error code */
150    int32_t whence;                    /* lseek argument */
151    boffset_t offset;                  /* lseek argument */
152    bool win32;                        /* Win32 GetLastError returned */
153    int32_t pkt_end;                   /* end packet sentinel */
154 };
155
156 /****************************************************************************
157  *                                                                          *
158  *                Bacula definitions                                        *
159  *                                                                          *
160  ****************************************************************************/
161
162 /* Bacula Variable Ids */
163 typedef enum {
164   bVarJobId     = 1,
165   bVarFDName    = 2,
166   bVarLevel     = 3,
167   bVarType      = 4,
168   bVarClient    = 5,
169   bVarJobName   = 6,
170   bVarJobStatus = 7,
171   bVarSinceTime = 8,
172   bVarAccurate  = 9,
173   bVarFileSeen  = 10,
174   bVarVssObject = 11,
175   bVarVssDllHandle = 12,
176   bVarWorkingDir = 13
177 } bVariable;
178
179 /* Events that are passed to plugin */
180 typedef enum {
181   bEventJobStart                        = 1,
182   bEventJobEnd                          = 2,
183   bEventStartBackupJob                  = 3,
184   bEventEndBackupJob                    = 4,
185   bEventStartRestoreJob                 = 5,
186   bEventEndRestoreJob                   = 6,
187   bEventStartVerifyJob                  = 7,
188   bEventEndVerifyJob                    = 8,
189   bEventBackupCommand                   = 9,
190   bEventRestoreCommand                  = 10,
191   bEventLevel                           = 11,
192   bEventSince                           = 12,
193   bEventCancelCommand                   = 13,
194   bEventVssBackupAddComponents          = 14,
195   bEventVssRestoreLoadComponentMetadata = 15,
196   bEventVssRestoreSetComponentsSelected = 16,
197   bEventRestoreObject                   = 17,
198   bEventEndFileSet                      = 18
199 } bEventType;
200
201 typedef struct s_bEvent {
202    uint32_t eventType;
203 } bEvent;
204
205 typedef struct s_baculaInfo {
206    uint32_t size;
207    uint32_t version;
208 } bInfo;
209
210 /* Bacula Core Routines -- not used within a plugin */
211 #ifdef FILE_DAEMON
212 struct BFILE;                   /* forward referenced */
213 struct FF_PKT;
214 void load_fd_plugins(const char *plugin_dir);
215 void new_plugins(JCR *jcr);
216 void free_plugins(JCR *jcr);
217 void generate_plugin_event(JCR *jcr, bEventType event, void *value=NULL);
218 bool send_plugin_name(JCR *jcr, BSOCK *sd, bool start);
219 bool plugin_name_stream(JCR *jcr, char *name);    
220 int plugin_create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace);
221 bool plugin_set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd);
222 int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level);
223 bool plugin_check_file(JCR *jcr, char *fname);
224 #endif
225
226 #ifdef __cplusplus
227 extern "C" {
228 #endif
229
230 /* 
231  * Bacula interface version and function pointers -- 
232  *  i.e. callbacks from the plugin to Bacula
233  */
234 typedef struct s_baculaFuncs {  
235    uint32_t size;
236    uint32_t version;
237    bRC (*registerBaculaEvents)(bpContext *ctx, ...);
238    bRC (*getBaculaValue)(bpContext *ctx, bVariable var, void *value);
239    bRC (*setBaculaValue)(bpContext *ctx, bVariable var, void *value);
240    bRC (*JobMessage)(bpContext *ctx, const char *file, int line, 
241        int type, utime_t mtime, const char *fmt, ...);     
242    bRC (*DebugMessage)(bpContext *ctx, const char *file, int line,
243        int level, const char *fmt, ...);
244    void *(*baculaMalloc)(bpContext *ctx, const char *file, int line, 
245        size_t size);
246    void (*baculaFree)(bpContext *ctx, const char *file, int line, void *mem);
247    bRC (*AddExclude)(bpContext *ctx, const char *file);
248    bRC (*AddInclude)(bpContext *ctx, const char *file);
249    bRC (*AddIncludeOptions)(bpContext *ctx, const char *opts);
250    bRC (*AddRegexToInclude)(bpContext *ctx, const char *item, int type);
251    bRC (*AddWildToInclude)(bpContext *ctx, const char *item, int type);
252 } bFuncs;
253
254
255
256
257 /****************************************************************************
258  *                                                                          *
259  *                Plugin definitions                                        *
260  *                                                                          *
261  ****************************************************************************/
262
263 typedef enum {
264   pVarName = 1,
265   pVarDescription = 2
266 } pVariable;
267
268
269 #define FD_PLUGIN_MAGIC     "*FDPluginData*" 
270 #define FD_PLUGIN_INTERFACE_VERSION  4
271
272 typedef struct s_pluginInfo {
273    uint32_t size;
274    uint32_t version;
275    const char *plugin_magic;
276    const char *plugin_license;
277    const char *plugin_author;
278    const char *plugin_date;
279    const char *plugin_version;
280    const char *plugin_description;
281 } pInfo;
282
283 /*
284  * This is a set of function pointers that Bacula can call
285  *  within the plugin.
286  */
287 typedef struct s_pluginFuncs {  
288    uint32_t size;
289    uint32_t version;
290    bRC (*newPlugin)(bpContext *ctx);
291    bRC (*freePlugin)(bpContext *ctx);
292    bRC (*getPluginValue)(bpContext *ctx, pVariable var, void *value);
293    bRC (*setPluginValue)(bpContext *ctx, pVariable var, void *value);
294    bRC (*handlePluginEvent)(bpContext *ctx, bEvent *event, void *value);
295    bRC (*startBackupFile)(bpContext *ctx, struct save_pkt *sp);
296    bRC (*endBackupFile)(bpContext *ctx);
297    bRC (*startRestoreFile)(bpContext *ctx, const char *cmd);
298    bRC (*endRestoreFile)(bpContext *ctx);
299    bRC (*pluginIO)(bpContext *ctx, struct io_pkt *io);
300    bRC (*createFile)(bpContext *ctx, struct restore_pkt *rp);
301    bRC (*setFileAttributes)(bpContext *ctx, struct restore_pkt *rp);
302    bRC (*checkFile)(bpContext *ctx, char *fname);
303 } pFuncs;
304
305 #define plug_func(plugin) ((pFuncs *)(plugin->pfuncs))
306 #define plug_info(plugin) ((pInfo *)(plugin->pinfo))
307
308 #ifdef __cplusplus
309 }
310 #endif
311
312 #endif /* __FD_PLUGINS_H */