]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/stored/bsr.h
Use doubly linked bsr list so that consumed bsrs may be
[bacula/bacula] / bacula / src / stored / bsr.h
1 /*
2    Bacula® - The Network Backup Solution
3
4    Copyright (C) 2002-2008 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 and included
11    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  * BootStrap record definition -- for restoring files.
30  *
31  *    Kern Sibbald, June 2002
32  *
33  *   Version $Id$
34  *
35  */
36
37
38 #ifndef __BSR_H
39 #define __BSR_H 1
40
41 #ifndef HAVE_REGEX_H
42 #include "lib/bregex.h"
43 #else
44 #include <regex.h>
45 #endif
46
47 /*
48  * List of Volume names to be read by Storage daemon.
49  *  Formed by Storage daemon from BSR
50  */
51 struct VOL_LIST {
52    VOL_LIST *next;
53    char VolumeName[MAX_NAME_LENGTH];
54    char MediaType[MAX_NAME_LENGTH];
55    char device[MAX_NAME_LENGTH];   /* ***FIXME*** use alist here */
56    int Slot;
57    uint32_t start_file;
58 };
59
60
61 /*
62  * !!!!!!!!!!!!!!!!!! NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
63  * !!!                                               !!!
64  * !!!   All records must have a pointer to          !!!
65  * !!!   the next item as the first item defined.    !!!
66  * !!!                                               !!!
67  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
68  */
69
70 struct BSR_VOLUME {
71    BSR_VOLUME *next;
72    char VolumeName[MAX_NAME_LENGTH];
73    char MediaType[MAX_NAME_LENGTH];
74    char device[MAX_NAME_LENGTH];   /* ***FIXME*** use alist here */
75    int32_t       Slot;                /* Slot */
76 };
77
78 struct BSR_CLIENT {
79    BSR_CLIENT *next;
80    char ClientName[MAX_NAME_LENGTH];
81 };
82
83 struct BSR_SESSID {
84    BSR_SESSID *next;
85    uint32_t sessid;
86    uint32_t sessid2;
87 };
88
89 struct BSR_SESSTIME {
90    BSR_SESSTIME *next;
91    uint32_t sesstime;
92    bool done;                         /* local done */
93 };
94
95 struct BSR_VOLFILE {
96    BSR_VOLFILE *next;
97    uint32_t sfile;                    /* start file */
98    uint32_t efile;                    /* end file */
99    bool done;                         /* local done */
100 };
101
102 struct BSR_VOLBLOCK {
103    BSR_VOLBLOCK *next;
104    uint32_t sblock;                   /* start block */
105    uint32_t eblock;                   /* end block */
106    bool done;                         /* local done */
107 };
108
109
110 struct BSR_FINDEX {
111    BSR_FINDEX *next;
112    int32_t findex;                    /* start file index */
113    int32_t findex2;                   /* end file index */
114    bool done;                         /* local done */
115 };
116
117 struct BSR_JOBID {
118    BSR_JOBID *next;
119    uint32_t JobId;
120    uint32_t JobId2;
121 };
122
123 struct BSR_JOBTYPE {
124    BSR_JOBTYPE *next;
125    uint32_t JobType;
126 };
127
128 struct BSR_JOBLEVEL {
129    BSR_JOBLEVEL *next;
130    uint32_t JobLevel;
131 };
132
133 struct BSR_JOB {
134    BSR_JOB *next;
135    char Job[MAX_NAME_LENGTH];
136    bool done;                         /* local done */
137 };
138
139 struct BSR_STREAM {
140    BSR_STREAM *next;
141    int32_t stream;                    /* stream desired */
142 };
143
144 struct BSR {
145    /* NOTE!!! next must be the first item */
146    BSR          *next;                /* pointer to next one */
147    BSR          *prev;                /* pointer to previous one */
148    BSR          *root;                /* root bsr */
149    bool          reposition;          /* set when any bsr is marked done */
150    bool          mount_next_volume;   /* set when next volume should be mounted */
151    bool          done;                /* set when everything found for this bsr */
152    bool          use_fast_rejection;  /* set if fast rejection can be used */
153    bool          use_positioning;     /* set if we can position the archive */
154    bool          skip_file;           /* skip all records for current file */
155    BSR_VOLUME   *volume;
156    uint32_t      count;               /* count of files to restore this bsr */
157    uint32_t      found;               /* count of restored files this bsr */
158    BSR_VOLFILE  *volfile;
159    BSR_VOLBLOCK *volblock;
160    BSR_SESSTIME *sesstime;
161    BSR_SESSID   *sessid;
162    BSR_JOBID    *JobId;
163    BSR_JOB      *job;
164    BSR_CLIENT   *client;
165    BSR_FINDEX   *FileIndex;
166    BSR_JOBTYPE  *JobType;
167    BSR_JOBLEVEL *JobLevel;
168    BSR_STREAM   *stream;
169    char         *fileregex;           /* set if restore is filtered on filename */
170    regex_t      *fileregex_re;
171    ATTR         *attr;                /* scratch space for unpacking */
172 };
173
174
175 #endif