]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/filed/fd_plugins.h
Add bVarWorkingDir to filed plugins
[bacula/bacula] / bacula / src / filed / fd_plugins.h
index 8625de7fc83df93de6ada846cdf99ce32fd0ca27..cbfe199e8019c33c35e21942ca46620f24a17c5e 100644 (file)
@@ -1,7 +1,7 @@
 /*
    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.
@@ -46,7 +46,7 @@
 #define _FILE_OFFSET_BITS 64
 #define _LARGEFILE_SOURCE 1
 #define _LARGE_FILES 1
-#endif
+#endif  /* ! _BACULA_H */
 
 #include <sys/types.h>
 
@@ -56,7 +56,7 @@
 #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 {
-  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_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 */
 };
 
 /*
  * This packet is used for file restore info transfer.
 */
 struct restore_pkt {
+   int32_t pkt_size;                  /* size of this packet */
    int32_t stream;                    /* attribute stream id */
    int32_t data_stream;               /* id of data stream to follow */
    int32_t type;                      /* file type FT */
@@ -97,6 +124,8 @@ struct restore_pkt {
    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 */
 };
 
 enum {
@@ -108,15 +137,20 @@ enum {
 };
 
 struct io_pkt {
+   int32_t pkt_size;                  /* Size of this packet */
    int32_t func;                      /* Function code */
    int32_t count;                     /* read/write count */
+   int32_t flags;                     /* Open flags */
    mode_t mode;                       /* permissions for created files */
-   int32_t flags;                     /* open flags (e.g. O_WRONLY ...) */
    char *buf;                         /* read/write buffer */
+   const char *fname;                 /* open filename */
    int32_t status;                    /* return status */
    int32_t io_errno;                  /* errno code */  
-   int32_t whence;
-   boffset_t offset;
+   int32_t lerror;                    /* Win32 error code */
+   int32_t whence;                    /* lseek argument */
+   boffset_t offset;                  /* lseek argument */
+   bool win32;                        /* Win32 GetLastError returned */
+   int32_t pkt_end;                   /* end packet sentinel */
 };
 
 /****************************************************************************
@@ -134,22 +168,33 @@ typedef enum {
   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 {
@@ -170,10 +215,11 @@ void new_plugins(JCR *jcr);
 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
@@ -191,9 +237,13 @@ typedef struct s_baculaFuncs {
    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;
 
 
@@ -212,7 +262,7 @@ typedef enum {
 
 
 #define FD_PLUGIN_MAGIC     "*FDPluginData*" 
-#define FD_PLUGIN_INTERFACE_VERSION  1
+#define FD_PLUGIN_INTERFACE_VERSION  4
 
 typedef struct s_pluginInfo {
    uint32_t size;
@@ -244,6 +294,7 @@ typedef struct s_pluginFuncs {
    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))