]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/dev.h
Apply Joao's patch to SQLite tables to make chars work.
[bacula/bacula] / bacula / src / stored / dev.h
index 265680f5b77fc151baeffc78af3314751feea377..8c044f000320668a32f018b0c9104d5c35945eb7 100644 (file)
@@ -20,7 +20,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Bacula® is a registered trademark of John Walker.
+   Bacula® is a registered trademark of Kern Sibbald.
    The licensor of Bacula is the Free Software Foundation Europe
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
@@ -95,7 +95,8 @@ enum {
    B_TAPE_DEV,
    B_DVD_DEV,
    B_FIFO_DEV,
-   B_VTL_DEV 
+   B_VTAPE_DEV,                       /* change to B_TAPE_DEV after init */
+   B_VTL_DEV
 };
 
 /* Generic status bits returned from status_dev() */
@@ -280,9 +281,9 @@ public:
    char pool_name[MAX_NAME_LENGTH];   /* pool name */
    char pool_type[MAX_NAME_LENGTH];   /* pool type */
 
-   /* Device wait times ***FIXME*** look at durations */
-   char BadVolName[MAX_NAME_LENGTH];  /* Last wrong Volume mounted */
+   char UnloadVolName[MAX_NAME_LENGTH];  /* Last wrong Volume mounted */
    bool poll;                         /* set to poll Volume */
+   /* Device wait times ***FIXME*** look at durations */
    int min_wait;
    int max_wait;
    int max_num_wait;
@@ -307,11 +308,13 @@ public:
    int is_autochanger() const { return capabilities & CAP_AUTOCHANGER; }
    int requires_mount() const { return capabilities & CAP_REQMOUNT; }
    int is_removable() const { return capabilities & CAP_REM; }
-   int is_tape() const { return dev_type == B_TAPE_DEV; }
+   int is_tape() const { return (dev_type == B_TAPE_DEV || 
+                                 dev_type == B_VTAPE_DEV); }
    int is_file() const { return dev_type == B_FILE_DEV; }
    int is_fifo() const { return dev_type == B_FIFO_DEV; }
    int is_dvd() const  { return dev_type == B_DVD_DEV; }
    int is_vtl() const  { return dev_type == B_VTL_DEV; }
+   int is_vtape() const  { return dev_type == B_VTAPE_DEV; }
    int is_open() const { return m_fd >= 0; }
    int is_offline() const { return state & ST_OFFLINE; }
    int is_labeled() const { return state & ST_LABEL; }
@@ -364,7 +367,8 @@ public:
    void set_part_spooled(int val) { if (val) state |= ST_PART_SPOOLED; \
           else state &= ~ST_PART_SPOOLED;
    };
-   void set_unload() { m_unload = true; };
+   bool is_volume_to_unload() const { \
+      return m_unload && strcmp(VolHdr.VolumeName, UnloadVolName) == 0; };
    void set_load() { m_load = true; };
    void inc_reserved() { m_num_reserved++; }
    void set_mounted(int val) { if (val) state |= ST_MOUNTED; \
@@ -381,13 +385,13 @@ public:
    void clear_media() { state &= ~ST_MEDIA; };
    void clear_short_block() { state &= ~ST_SHORT; };
    void clear_freespace_ok() { state &= ~ST_FREESPACE_OK; };
-   void clear_unload() { m_unload = false; };
+   void clear_unload() { m_unload = false; UnloadVolName[0] = 0; };
    void clear_load() { m_load = false; };
    char *bstrerror(void) { return errmsg; };
    char *print_errmsg() { return errmsg; };
    int32_t get_slot() const { return m_slot; };
 
-
+   void set_unload();            /* in dev.c */
    void clear_volhdr();          /* in dev.c */
    void close();                 /* in dev.c */
    void close_part(DCR *dcr);    /* in dev.c */
@@ -426,6 +430,14 @@ public:
    uint32_t get_block_num() const { return block_num; };
    int fd() const { return m_fd; };
 
+   /* low level operations */
+   void init_backend();
+   int (*d_open)(const char *pathname, int flags, ...);
+   int (*d_close)(int fd);
+   int (*d_ioctl)(int fd, ioctl_req_t request, ...);
+   ssize_t (*d_read)(int fd, void *buffer, size_t count);
+   ssize_t (*d_write)(int fd, const void *buffer, size_t count);
+
    /* 
     * Locking and blocking calls
     */
@@ -526,7 +538,10 @@ public:
    void clear_reserved();
    void set_reserved();
    void unreserve_device();
+
+   /* Methods in vol_mgr.c */
    bool can_i_use_volume();
+   bool can_i_write_volume();
 
    /* Methods in mount.c */
    bool mount_next_write_volume();
@@ -534,11 +549,14 @@ public:
    void mark_volume_in_error();
    void mark_volume_not_inchanger();
    int try_autolabel(bool opened);
+   bool find_a_volume();
    bool is_suitable_volume_mounted();
    bool is_eod_valid();
    int check_volume_label(bool &ask, bool &autochanger);
    void release_volume();
    void do_swapping(bool is_writing);
+   bool do_unload();
+   bool do_load(bool is_writing);
    bool is_tape_position_ok();
 };
 
@@ -549,6 +567,7 @@ class VOLRES {
    bool m_swapping;                   /* set when swapping to another drive */
    bool m_in_use;                     /* set when volume reserved or in use */
    int32_t m_slot;                    /* slot of swapping volume */
+   uint32_t m_JobId;                  /* JobId for read volumes */
 public:
    dlink link;
    char *vol_name;                    /* Volume name */
@@ -563,6 +582,8 @@ public:
    void set_slot(int32_t slot) { m_slot = slot; };
    void clear_slot() { m_slot = -1; };
    int32_t get_slot() const { return m_slot; };
+   uint32_t get_jobid() const { return m_JobId; };
+   void set_jobid(uint32_t JobId) { m_JobId = JobId; };
 };