]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/record.h
Clean up some SD message nos.
[bacula/bacula] / bacula / src / stored / record.h
index fe6f41cea1505a8c16d754059ee021038dd64d5c..327b2d525e6b06de46b773138416ef8bab8a92d5 100644 (file)
 #define VOL_CREATE_ERROR  5               /* Error creating label */
 #define VOL_VERSION_ERROR 6               /* Bacula version error */
 #define VOL_LABEL_ERROR   7               /* Bad label type */
+#define VOL_NO_MEDIA      8               /* Hard error -- no media present */
 
 
-/* Length of Record Header (5 * 4 bytes) */
-#define RECHDR_LENGTH 20
+/*  See block.h for RECHDR_LENGTH */
 
 /*
  * This is the Media structure for a record header.
  *  NB: when it is written it is serialized.
- */
-typedef struct s_record_hdr {
+
    uint32_t VolSessionId;
    uint32_t VolSessionTime;
+
+ * The above 8 bytes are only written in a BB01 block, BB02
+ *  and later blocks contain these values in the block header
+ *  rather than the record header.
+
    int32_t  FileIndex;
    int32_t  Stream;
    uint32_t data_len;
-} RECORD_HDR;
 
+ */
+
+/* Record state bit definitions */
 #define REC_NO_HEADER        0x01     /* No header read */
 #define REC_PARTIAL_RECORD   0x02     /* returning partial record */
 #define REC_BLOCK_EMPTY      0x04     /* not enough data in block */
 #define REC_NO_MATCH         0x08     /* No match on continuation data */
 #define REC_CONTINUATION     0x10     /* Continuation record found */
+#define REC_ISTAPE           0x20     /* Set if device is tape */
+
+#define is_partial_record(r) ((r)->state & REC_PARTIAL_RECORD)
+#define is_block_empty(r)    ((r)->state & REC_BLOCK_EMPTY)
 
 /*
  * DEV_RECORD for reading and writing records.
@@ -81,7 +91,7 @@ typedef struct s_dev_rec {
    uint32_t data_len;                 /* current record length */
    uint32_t remainder;                /* remaining bytes to read/write */
    uint32_t state;                    /* state bits */
-   uint8_t  ser_buf[RECHDR_LENGTH];   /* serialized record header goes here */
+   uint8_t  ser_buf[WRITE_RECHDR_LENGTH];   /* serialized record header goes here */
    POOLMEM *data;                     /* Record data. This MUST be a memory pool item */
 } DEV_RECORD;
 
@@ -96,11 +106,15 @@ typedef struct s_dev_rec {
 #define EOM_LABEL   -3                /* Writen at end of tape */        
 #define SOS_LABEL   -4                /* Start of Session */
 #define EOS_LABEL   -5                /* End of Session */
+#define EOT_LABEL   -6                /* End of physical tape (2 eofs) */
 
 /* 
- *   Volume Label Record
+ *   Volume Label Record.  This is the in-memory definition. The
+ *     tape definition is defined in the serialization code itself
+ *     ser_volume_label() and unser_volume_label() and is slightly different.
  */
+
 struct Volume_Label {
   /*  
    * The first items in this structure are saved
@@ -117,8 +131,15 @@ struct Volume_Label {
 
   uint32_t VerNum;                    /* Label version number */
 
+  /* VerNum <= 10 */
   float64_t label_date;               /* Date tape labeled */
   float64_t label_time;               /* Time tape labeled */
+
+  /* VerNum >= 11 */
+  btime_t   label_btime;              /* tdate tape labeled */
+  btime_t   write_btime;              /* tdate tape written */
+
+  /* Unused with VerNum >= 11 */
   float64_t write_date;               /* Date this label written */
   float64_t write_time;               /* Time this label written */
 
@@ -129,9 +150,9 @@ struct Volume_Label {
   char MediaType[MAX_NAME_LENGTH];    /* Type of this media */
 
   char HostName[MAX_NAME_LENGTH];     /* Host name of writing computer */
-  char LabelProg[32];                 /* Label program name */
-  char ProgVersion[32];               /* Program version */
-  char ProgDate[32];                  /* Program build date/time */
+  char LabelProg[50];                 /* Label program name */
+  char ProgVersion[50];               /* Program version */
+  char ProgDate[50];                  /* Program build date/time */
 };
 
 #define SER_LENGTH_Volume_Label 1024   /* max serialised length of volume label */
@@ -151,7 +172,13 @@ struct Session_Label {
   uint32_t JobId;                     /* Job id */
   uint32_t VolumeIndex;               /* Sequence no of volume for this job */
 
+  /* VerNum >= 11 */
+  btime_t   write_btime;              /* Tdate this label written */
+
+  /* VerNum < 11 */
   float64_t write_date;               /* Date this label written */
+
+  /* Unused VerNum >= 11 */
   float64_t write_time;               /* Time this label written */
 
   char PoolName[MAX_NAME_LENGTH];     /* Pool name */
@@ -160,16 +187,18 @@ struct Session_Label {
   char ClientName[MAX_NAME_LENGTH];
   char Job[MAX_NAME_LENGTH];          /* Unique name of this Job */
   char FileSetName[MAX_NAME_LENGTH];
+  char FileSetMD5[MAX_NAME_LENGTH];
   uint32_t JobType;
   uint32_t JobLevel;
   /* The remainder are part of EOS label only */
   uint32_t JobFiles;
   uint64_t JobBytes;
-  uint32_t start_block;
-  uint32_t end_block;
-  uint32_t start_file;
-  uint32_t end_file;
+  uint32_t StartBlock;
+  uint32_t EndBlock;
+  uint32_t StartFile;
+  uint32_t EndFile;
   uint32_t JobErrors;
+  uint32_t JobStatus;                 /* Job status */
 
 };
 typedef struct Session_Label SESSION_LABEL;