]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/stored/protos.h
Backport from BEE
[bacula/bacula] / bacula / src / stored / protos.h
1 /*
2    Bacula® - The Network Backup Solution
3
4    Copyright (C) 2000-2014 Free Software Foundation Europe e.V.
5
6    The main author of Bacula is Kern Sibbald, with contributions from many
7    others, a complete list can be found in the file AUTHORS.
8
9    You may use this file and others of this release according to the
10    license defined in the LICENSE file, which includes the Affero General
11    Public License, v3.0 ("AGPLv3") and some additional permissions and
12    terms pursuant to its AGPLv3 Section 7.
13
14    Bacula® is a registered trademark of Kern Sibbald.
15 */
16 /*
17  * Protypes for stored
18  *
19  *   Written by Kern Sibbald, MM
20  */
21
22 /* From stored.c */
23 uint32_t new_VolSessionId();
24
25 /* From acquire.c */
26 DCR     *acquire_device_for_append(DCR *dcr);
27 bool     acquire_device_for_read(DCR *dcr);
28 bool     release_device(DCR *dcr);
29 bool     clean_device(DCR *dcr);
30 DCR     *new_dcr(JCR *jcr, DCR *dcr, DEVICE *dev, bool writing=true);
31 void     free_dcr(DCR *dcr);
32
33 /* From append.c */
34 bool send_attrs_to_dir(JCR *jcr, DEV_RECORD *rec);
35
36 /* From askdir.c */
37 enum get_vol_info_rw {
38    GET_VOL_INFO_FOR_WRITE,
39    GET_VOL_INFO_FOR_READ
40 };
41 bool    dir_get_volume_info(DCR *dcr, enum get_vol_info_rw);
42 bool    dir_find_next_appendable_volume(DCR *dcr);
43 bool    dir_update_volume_info(DCR *dcr, bool label, bool update_LastWritten);
44 bool    dir_ask_sysop_to_create_appendable_volume(DCR *dcr);
45 bool    dir_ask_sysop_to_mount_volume(DCR *dcr, bool read_access);
46 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec);
47 bool    dir_send_job_status(JCR *jcr);
48 bool    dir_create_jobmedia_record(DCR *dcr, bool zero=false);
49 bool    dir_update_device(JCR *jcr, DEVICE *dev);
50 bool    dir_update_changer(JCR *jcr, AUTOCHANGER *changer);
51
52 /* authenticate.c */
53 int     authenticate_director(JCR *jcr);
54 int     authenticate_filed(JCR *jcr);
55 bool    authenticate_storagedaemon(JCR *jcr, char *Job);
56
57 /* From autochanger.c */
58 bool     init_autochangers();
59 int      autoload_device(DCR *dcr, bool writing, BSOCK *dir);
60 bool     autochanger_cmd(DCR *dcr, BSOCK *dir, const char *cmd);
61 bool     unload_autochanger(DCR *dcr, int loaded);
62 bool     unload_dev(DCR *dcr, DEVICE *dev);
63 char    *edit_device_codes(DCR *dcr, char *omsg, const char *imsg, const char *cmd);
64 int      get_autochanger_loaded_slot(DCR *dcr);
65
66 /* From block.c */
67 void    dump_block(DEV_BLOCK *b, const char *msg);
68 DEV_BLOCK *new_block(DEVICE *dev);
69 DEV_BLOCK *dup_block(DEV_BLOCK *eblock);
70 void    init_block_write(DEV_BLOCK *block);
71 void    empty_block(DEV_BLOCK *block);
72 void    free_block(DEV_BLOCK *block);
73 void    print_block_read_errors(JCR *jcr, DEV_BLOCK *block);
74 void    ser_block_header(DEV_BLOCK *block);
75 bool    is_block_empty(DEV_BLOCK *block);
76 bool    terminate_writing_volume(DCR *dcr);
77
78 /* From block_util.c */
79 bool    terminate_writing_volume(DCR *dcr);
80 bool    user_volume_size_reached(DCR *dcr, bool quiet);
81 bool    check_for_newvol_or_newfile(DCR *dcr);
82
83 /* From butil.c -- utilities for SD tool programs */
84 void    setup_me();
85 void    print_ls_output(const char *fname, const char *link, int type, struct stat *statp);
86 JCR    *setup_jcr(const char *name, char *dev_name, BSR *bsr,
87                   const char *VolumeName, bool writing);
88 void    display_tape_error_status(JCR *jcr, DEVICE *dev);
89
90
91 /* From dev.c */
92 DEVICE  *init_dev(JCR *jcr, DEVRES *device);
93 bool     can_open_mounted_dev(DEVICE *dev);
94 bool     load_dev(DEVICE *dev);
95 int      write_block(DEVICE *dev);
96 uint32_t status_dev(DEVICE *dev);
97 void     attach_jcr_to_device(DEVICE *dev, JCR *jcr);
98 void     detach_jcr_from_device(DEVICE *dev, JCR *jcr);
99 JCR     *next_attached_jcr(DEVICE *dev, JCR *jcr);
100 void     init_device_wait_timers(DCR *dcr);
101 void     init_jcr_device_wait_timers(JCR *jcr);
102 bool     double_dev_wait_time(DEVICE *dev);
103
104 /* From dvd.c */
105 int     dvd_open_next_part(DCR *dcr);
106 bool    dvd_write_part(DCR *dcr);
107 bool    dvd_close_job(DCR *dcr);
108 void    make_mounted_dvd_filename(DEVICE *dev, POOL_MEM &archive_name);
109 void    make_spooled_dvd_filename(DEVICE *dev, POOL_MEM &archive_name);
110 bool    truncate_dvd(DCR *dcr);
111 bool    check_can_write_on_non_blank_dvd(DCR *dcr);
112 int     find_num_dvd_parts(DCR *dcr);
113 boffset_t   lseek_dvd(DCR *dcr, boffset_t offset, int whence);
114 void    dvd_remove_empty_part(DCR *dcr);
115
116 /* From device.c */
117 bool     open_dev(DCR *dcr);
118 bool     first_open_device(DCR *dcr);
119 bool     fixup_device_block_write_error(DCR *dcr, int retries=4);
120 void     set_start_vol_position(DCR *dcr);
121 void     set_new_volume_parameters(DCR *dcr);
122 void     set_new_file_parameters(DCR *dcr);
123
124 /* From dircmd.c */
125 void     *handle_connection_request(void *arg);
126
127
128 /* From fd_cmds.c */
129 void     run_job(JCR *jcr);
130 void     do_client_commands(JCR *jcr);
131
132 /* From job.c */
133 void     stored_free_jcr(JCR *jcr);
134 void     connection_from_filed(void *arg);
135 void     handle_filed_connection(BSOCK *fd, char *job_name,
136            int fdversion, int sdversion);
137
138 /* From label.c */
139 int      read_dev_volume_label(DCR *dcr);
140 int      read_dvd_volume_label(DCR *dcr, bool write);
141 void     create_session_label(DCR *dcr, DEV_RECORD *rec, int label);
142 void     create_volume_header(DEVICE *dev, const char *VolName, const char *PoolName, bool dvdnow);
143 #define ANSI_VOL_LABEL 0
144 #define ANSI_EOF_LABEL 1
145 #define ANSI_EOV_LABEL 2
146 bool     write_ansi_ibm_labels(DCR *dcr, int type, const char *VolName);
147 int      read_ansi_ibm_label(DCR *dcr);
148 bool     write_session_label(DCR *dcr, int label);
149 void     dump_volume_label(DEVICE *dev);
150 void     dump_label_record(DEVICE *dev, DEV_RECORD *rec, int verbose);
151 bool     unser_volume_label(DEVICE *dev, DEV_RECORD *rec);
152 bool     unser_session_label(SESSION_LABEL *label, DEV_RECORD *rec);
153 bool     write_new_volume_label_to_dev(DCR *dcr, const char *VolName,
154             const char *PoolName, bool relabel, bool dvdnow);
155
156 /* From locks.c */
157 void     _lock_device(const char *file, int line, DEVICE *dev);
158 void     _unlock_device(const char *file, int line, DEVICE *dev);
159 void     _block_device(const char *file, int line, DEVICE *dev, int state);
160 void     _unblock_device(const char *file, int line, DEVICE *dev);
161 void     _steal_device_lock(const char *file, int line, DEVICE *dev, bsteal_lock_t *hold, int state);
162 void     _give_back_device_lock(const char *file, int line, DEVICE *dev, bsteal_lock_t *hold);
163
164
165 /* From match_bsr.c */
166 int      match_bsr(BSR *bsr, DEV_RECORD *rec, VOLUME_LABEL *volrec,
167               SESSION_LABEL *sesrec, JCR *jcr);
168 int      match_bsr_block(BSR *bsr, DEV_BLOCK *block);
169 void     position_bsr_block(BSR *bsr, DEV_BLOCK *block);
170 BSR     *find_next_bsr(BSR *root_bsr, DEVICE *dev);
171 bool     is_this_bsr_done(BSR *bsr, DEV_RECORD *rec);
172 uint64_t get_bsr_start_addr(BSR *bsr,
173                             uint32_t *file=NULL,
174                             uint32_t *block=NULL);
175
176
177 /* From mount.c */
178 bool     mount_next_read_volume(DCR *dcr);
179
180 /* From parse_bsr.c */
181 BSR     *parse_bsr(JCR *jcr, char *lf);
182 void     dump_bsr(BSR *bsr, bool recurse);
183 void     free_bsr(BSR *bsr);
184 void     free_restore_volume_list(JCR *jcr);
185 void     create_restore_volume_list(JCR *jcr);
186
187 /* From record.c */
188 const char *FI_to_ascii(char *buf, int fi);
189 const char *stream_to_ascii(char *buf, int stream, int fi);
190 bool        write_record_to_block(DCR *dcr, DEV_RECORD *rec);
191 bool        can_write_record_to_block(DEV_BLOCK *block, DEV_RECORD *rec);
192 bool        read_record_from_block(DCR *dcr, DEV_RECORD *rec);
193 DEV_RECORD *new_record();
194 void        free_record(DEV_RECORD *rec);
195 void        empty_record(DEV_RECORD *rec);
196 uint64_t    get_record_address(DEV_RECORD *rec);
197
198 /* From read_record.c */
199 bool read_records(DCR *dcr,
200        bool record_cb(DCR *dcr, DEV_RECORD *rec),
201        bool mount_cb(DCR *dcr));
202
203 /* From reserve.c */
204 void    init_reservations_lock();
205 void    term_reservations_lock();
206 void    send_drive_reserve_messages(JCR *jcr, void sendit(const char *msg, int len, void *sarg), void *arg);
207 bool    find_suitable_device_for_job(JCR *jcr, RCTX &rctx);
208 int     search_res_for_device(RCTX &rctx);
209 void    release_reserve_messages(JCR *jcr);
210
211 extern int reservations_lock_count;
212
213 /* From status.c */
214 void    _dbg_list_one_device(DEVICE *dev, const char *f, int l);
215 #define dbg_list_one_device(x, dev) if (chk_dbglvl(x))     \
216         _dbg_list_one_device(dev, __FILE__, __LINE__)
217
218 /* From vol_mgr.c */
219 void    init_vol_list_lock();
220 void    term_vol_list_lock();
221 VOLRES *reserve_volume(DCR *dcr, const char *VolumeName);
222 bool    free_volume(DEVICE *dev);
223 bool    is_vol_list_empty();
224 dlist  *dup_vol_list(JCR *jcr);
225 void    free_temp_vol_list(dlist *temp_vol_list);
226 bool    volume_unused(DCR *dcr);
227 void    create_volume_lists();
228 void    free_volume_lists();
229 void    list_volumes(void sendit(const char *msg, int len, void *sarg), void *arg);
230 bool    is_volume_in_use(DCR *dcr);
231 extern  int vol_list_lock_count;
232 void    add_read_volume(JCR *jcr, const char *VolumeName);
233 void    remove_read_volume(JCR *jcr, const char *VolumeName);
234
235
236 /* From spool.c */
237 bool    begin_data_spool          (DCR *dcr);
238 bool    discard_data_spool        (DCR *dcr);
239 bool    commit_data_spool         (DCR *dcr);
240 bool    are_attributes_spooled    (JCR *jcr);
241 bool    begin_attribute_spool     (JCR *jcr);
242 bool    discard_attribute_spool   (JCR *jcr);
243 bool    commit_attribute_spool    (JCR *jcr);
244 bool    write_block_to_spool_file (DCR *dcr);
245 void    list_spool_stats          (void sendit(const char *msg, int len, void *sarg), void *arg);
246
247 /* From wait.c */
248 int wait_for_sysop(DCR *dcr);
249 bool wait_for_any_device(JCR *jcr, int &retries);
250 bool wait_for_device(DCR *dcr, int &retries);
251
252 /* stored_conf.c */
253 void store_devtype(LEX *lc, RES_ITEM *item, int index, int pass);
254 void store_maxblocksize(LEX *lc, RES_ITEM *item, int index, int pass);