/*
Bacula® - The Network Backup Solution
- Copyright (C) 2007-2008 Free Software Foundation Europe e.V.
+ Copyright (C) 2007-2010 Free Software Foundation Europe e.V.
The main author of Bacula is Kern Sibbald, with contributions from
many others, a complete list can be found in the file AUTHORS.
#define _FILE_OFFSET_BITS 64
#define _LARGEFILE_SOURCE 1
#define _LARGE_FILES 1
-#endif
+#endif /* ! _BACULA_H */
#include <sys/types.h>
#else
#include "winconfig.h"
#endif
-#else
+#else /* !HAVE_WIN32 */
#ifndef __CONFIG_H
#include "config.h"
#define __CONFIG_H
#include "bc_types.h"
#include "lib/plugins.h"
#include <sys/stat.h>
+#ifdef HAVE_WIN32
+#include "../win32/filed/vss.h"
+#endif
+
+/*
+ * This packet is used for the restore objects
+ * It is passed to the plugin when restoring
+ * the object.
+ */
+struct restore_object_pkt {
+ int32_t pkt_size; /* size of this packet */
+ char *object_name; /* Object name */
+ char *object; /* restore object data to save */
+ int32_t object_type; /* FT_xx for this file */
+ int32_t object_len; /* restore object length */
+ int32_t object_index; /* restore object index */
+ int32_t stream; /* attribute stream id */
+ uint32_t JobId; /* JobId object came from */
+ int32_t pkt_end; /* end packet sentinel */
+};
/*
* This packet is used for file save info transfer.
*/
struct save_pkt {
- int32_t pkt_size; /* size of this packet */
- char *fname; /* Full path and filename */
- char *link; /* Link name if any */
- struct stat statp; /* System stat() packet for file */
- int32_t type; /* FT_xx for this file */
- uint32_t flags; /* Bacula internal flags */
- bool portable; /* set if data format is portable */
- char *cmd; /* command */
- int32_t pkt_end; /* end packet sentinel */
+ int32_t pkt_size; /* size of this packet */
+ char *fname; /* Full path and filename */
+ char *link; /* Link name if any */
+ struct stat statp; /* System stat() packet for file */
+ int32_t type; /* FT_xx for this file */
+ uint32_t flags; /* Bacula internal flags */
+ bool portable; /* set if data format is portable */
+ char *cmd; /* command */
+ char *object_name; /* Object name to create */
+ char *object; /* restore object data to save */
+ int32_t object_len; /* restore object length */
+ int32_t index; /* restore object index */
+ int32_t pkt_end; /* end packet sentinel */
};
/*
const char *where; /* where */
const char *RegexWhere; /* regex where */
int replace; /* replace flag */
+ int create_status; /* status from createFile() */
int32_t pkt_end; /* end packet sentinel */
};
bVarClient = 5,
bVarJobName = 6,
bVarJobStatus = 7,
- bVarSinceTime = 8
+ bVarSinceTime = 8,
+ bVarAccurate = 9,
+ bVarFileSeen = 10,
+ bVarVssObject = 11,
+ bVarVssDllHandle = 12,
+ bVarWorkingDir = 13
} bVariable;
+/* Events that are passed to plugin */
typedef enum {
- bEventJobStart = 1,
- bEventJobEnd = 2,
- bEventStartBackupJob = 3,
- bEventEndBackupJob = 4,
- bEventStartRestoreJob = 5,
- bEventEndRestoreJob = 6,
- bEventStartVerifyJob = 7,
- bEventEndVerifyJob = 8,
- bEventBackupCommand = 9,
- bEventRestoreCommand = 10,
- bEventLevel = 11,
- bEventSince = 12,
+ bEventJobStart = 1,
+ bEventJobEnd = 2,
+ bEventStartBackupJob = 3,
+ bEventEndBackupJob = 4,
+ bEventStartRestoreJob = 5,
+ bEventEndRestoreJob = 6,
+ bEventStartVerifyJob = 7,
+ bEventEndVerifyJob = 8,
+ bEventBackupCommand = 9,
+ bEventRestoreCommand = 10,
+ bEventLevel = 11,
+ bEventSince = 12,
+ bEventCancelCommand = 13,
+ bEventVssBackupAddComponents = 14,
+ bEventVssRestoreLoadComponentMetadata = 15,
+ bEventVssRestoreSetComponentsSelected = 16,
+ bEventRestoreObject = 17,
} bEventType;
typedef struct s_bEvent {
void free_plugins(JCR *jcr);
void generate_plugin_event(JCR *jcr, bEventType event, void *value=NULL);
bool send_plugin_name(JCR *jcr, BSOCK *sd, bool start);
-void plugin_name_stream(JCR *jcr, char *name);
+bool plugin_name_stream(JCR *jcr, char *name);
int plugin_create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace);
bool plugin_set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd);
int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level);
+bool plugin_check_file(JCR *jcr, char *fname);
#endif
#ifdef __cplusplus
bRC (*getBaculaValue)(bpContext *ctx, bVariable var, void *value);
bRC (*setBaculaValue)(bpContext *ctx, bVariable var, void *value);
bRC (*JobMessage)(bpContext *ctx, const char *file, int line,
- int type, time_t mtime, const char *fmt, ...);
+ int type, utime_t mtime, const char *fmt, ...);
bRC (*DebugMessage)(bpContext *ctx, const char *file, int line,
int level, const char *fmt, ...);
+ void *(*baculaMalloc)(bpContext *ctx, const char *file, int line,
+ size_t size);
+ void (*baculaFree)(bpContext *ctx, const char *file, int line, void *mem);
+ bRC (*AddExclude)(bpContext *ctx, const char *file);
} bFuncs;
#define FD_PLUGIN_MAGIC "*FDPluginData*"
-#define FD_PLUGIN_INTERFACE_VERSION 1
+#define FD_PLUGIN_INTERFACE_VERSION 4
typedef struct s_pluginInfo {
uint32_t size;
bRC (*pluginIO)(bpContext *ctx, struct io_pkt *io);
bRC (*createFile)(bpContext *ctx, struct restore_pkt *rp);
bRC (*setFileAttributes)(bpContext *ctx, struct restore_pkt *rp);
+ bRC (*checkFile)(bpContext *ctx, char *fname);
} pFuncs;
#define plug_func(plugin) ((pFuncs *)(plugin->pfuncs))