1# This file was automatically generated by SWIG (http://www.swig.org).
2# Version 3.0.7
3#
4# Do not make changes to this file unless you know what you are doing--modify
5# the SWIG interface file instead.
6
7package Amanda::Header;
8use base qw(Exporter);
9use base qw(DynaLoader);
10package Amanda::Headerc;
11bootstrap Amanda::Header;
12package Amanda::Header;
13@EXPORT = qw();
14
15# ---------- BASE METHODS -------------
16
17package Amanda::Header;
18
19sub TIEHASH {
20    my ($classname,$obj) = @_;
21    return bless $obj, $classname;
22}
23
24sub CLEAR { }
25
26sub FIRSTKEY { }
27
28sub NEXTKEY { }
29
30sub FETCH {
31    my ($self,$field) = @_;
32    my $member_func = "swig_${field}_get";
33    $self->$member_func();
34}
35
36sub STORE {
37    my ($self,$field,$newval) = @_;
38    my $member_func = "swig_${field}_set";
39    $self->$member_func($newval);
40}
41
42sub this {
43    my $ptr = shift;
44    return tied(%$ptr);
45}
46
47
48# ------- FUNCTION WRAPPERS --------
49
50package Amanda::Header;
51
52*C_from_string = *Amanda::Headerc::C_from_string;
53
54############# Class : Amanda::Header::Header ##############
55
56package Amanda::Header::Header;
57use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
58@ISA = qw( Amanda::Header );
59%OWNER = ();
60%ITERATORS = ();
61*swig_type_get = *Amanda::Headerc::Header_type_get;
62*swig_type_set = *Amanda::Headerc::Header_type_set;
63*swig_datestamp_get = *Amanda::Headerc::Header_datestamp_get;
64*swig_datestamp_set = *Amanda::Headerc::Header_datestamp_set;
65*swig_dumplevel_get = *Amanda::Headerc::Header_dumplevel_get;
66*swig_dumplevel_set = *Amanda::Headerc::Header_dumplevel_set;
67*swig_compressed_get = *Amanda::Headerc::Header_compressed_get;
68*swig_compressed_set = *Amanda::Headerc::Header_compressed_set;
69*swig_encrypted_get = *Amanda::Headerc::Header_encrypted_get;
70*swig_encrypted_set = *Amanda::Headerc::Header_encrypted_set;
71*swig_comp_suffix_get = *Amanda::Headerc::Header_comp_suffix_get;
72*swig_comp_suffix_set = *Amanda::Headerc::Header_comp_suffix_set;
73*swig_encrypt_suffix_get = *Amanda::Headerc::Header_encrypt_suffix_get;
74*swig_encrypt_suffix_set = *Amanda::Headerc::Header_encrypt_suffix_set;
75*swig_name_get = *Amanda::Headerc::Header_name_get;
76*swig_name_set = *Amanda::Headerc::Header_name_set;
77*swig_disk_get = *Amanda::Headerc::Header_disk_get;
78*swig_disk_set = *Amanda::Headerc::Header_disk_set;
79*swig_program_get = *Amanda::Headerc::Header_program_get;
80*swig_program_set = *Amanda::Headerc::Header_program_set;
81*swig_application_get = *Amanda::Headerc::Header_application_get;
82*swig_application_set = *Amanda::Headerc::Header_application_set;
83*swig_srvcompprog_get = *Amanda::Headerc::Header_srvcompprog_get;
84*swig_srvcompprog_set = *Amanda::Headerc::Header_srvcompprog_set;
85*swig_clntcompprog_get = *Amanda::Headerc::Header_clntcompprog_get;
86*swig_clntcompprog_set = *Amanda::Headerc::Header_clntcompprog_set;
87*swig_srv_encrypt_get = *Amanda::Headerc::Header_srv_encrypt_get;
88*swig_srv_encrypt_set = *Amanda::Headerc::Header_srv_encrypt_set;
89*swig_clnt_encrypt_get = *Amanda::Headerc::Header_clnt_encrypt_get;
90*swig_clnt_encrypt_set = *Amanda::Headerc::Header_clnt_encrypt_set;
91*swig_recover_cmd_get = *Amanda::Headerc::Header_recover_cmd_get;
92*swig_recover_cmd_set = *Amanda::Headerc::Header_recover_cmd_set;
93*swig_uncompress_cmd_get = *Amanda::Headerc::Header_uncompress_cmd_get;
94*swig_uncompress_cmd_set = *Amanda::Headerc::Header_uncompress_cmd_set;
95*swig_decrypt_cmd_get = *Amanda::Headerc::Header_decrypt_cmd_get;
96*swig_decrypt_cmd_set = *Amanda::Headerc::Header_decrypt_cmd_set;
97*swig_srv_decrypt_opt_get = *Amanda::Headerc::Header_srv_decrypt_opt_get;
98*swig_srv_decrypt_opt_set = *Amanda::Headerc::Header_srv_decrypt_opt_set;
99*swig_clnt_decrypt_opt_get = *Amanda::Headerc::Header_clnt_decrypt_opt_get;
100*swig_clnt_decrypt_opt_set = *Amanda::Headerc::Header_clnt_decrypt_opt_set;
101*swig_cont_filename_get = *Amanda::Headerc::Header_cont_filename_get;
102*swig_cont_filename_set = *Amanda::Headerc::Header_cont_filename_set;
103*swig_dle_str_get = *Amanda::Headerc::Header_dle_str_get;
104*swig_dle_str_set = *Amanda::Headerc::Header_dle_str_set;
105*swig_is_partial_get = *Amanda::Headerc::Header_is_partial_get;
106*swig_is_partial_set = *Amanda::Headerc::Header_is_partial_set;
107*swig_partnum_get = *Amanda::Headerc::Header_partnum_get;
108*swig_partnum_set = *Amanda::Headerc::Header_partnum_set;
109*swig_totalparts_get = *Amanda::Headerc::Header_totalparts_get;
110*swig_totalparts_set = *Amanda::Headerc::Header_totalparts_set;
111*swig_blocksize_get = *Amanda::Headerc::Header_blocksize_get;
112*swig_blocksize_set = *Amanda::Headerc::Header_blocksize_set;
113*swig_orig_size_get = *Amanda::Headerc::Header_orig_size_get;
114*swig_orig_size_set = *Amanda::Headerc::Header_orig_size_set;
115sub new {
116    my $pkg = shift;
117    my $self = Amanda::Headerc::new_Header(@_);
118    bless $self, $pkg if defined($self);
119}
120
121sub DESTROY {
122    return unless $_[0]->isa('HASH');
123    my $self = tied(%{$_[0]});
124    return unless defined $self;
125    delete $ITERATORS{$self};
126    if (exists $OWNER{$self}) {
127        Amanda::Headerc::delete_Header($self);
128        delete $OWNER{$self};
129    }
130}
131
132*to_string = *Amanda::Headerc::Header_to_string;
133*debug_dump = *Amanda::Headerc::Header_debug_dump;
134*summary = *Amanda::Headerc::Header_summary;
135sub DISOWN {
136    my $self = shift;
137    my $ptr = tied(%$self);
138    delete $OWNER{$ptr};
139}
140
141sub ACQUIRE {
142    my $self = shift;
143    my $ptr = tied(%$self);
144    $OWNER{$ptr} = 1;
145}
146
147
148############# Class : Amanda::Header::HeaderXML ##############
149
150package Amanda::Header::HeaderXML;
151use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
152@ISA = qw( Amanda::Header );
153%OWNER = ();
154%ITERATORS = ();
155*swig_disk_get = *Amanda::Headerc::HeaderXML_disk_get;
156*swig_disk_set = *Amanda::Headerc::HeaderXML_disk_set;
157*swig_device_get = *Amanda::Headerc::HeaderXML_device_get;
158*swig_device_set = *Amanda::Headerc::HeaderXML_device_set;
159*swig_program_is_application_api_get = *Amanda::Headerc::HeaderXML_program_is_application_api_get;
160*swig_program_is_application_api_set = *Amanda::Headerc::HeaderXML_program_is_application_api_set;
161*swig_program_get = *Amanda::Headerc::HeaderXML_program_get;
162*swig_program_set = *Amanda::Headerc::HeaderXML_program_set;
163*swig_estimatelist_get = *Amanda::Headerc::HeaderXML_estimatelist_get;
164*swig_estimatelist_set = *Amanda::Headerc::HeaderXML_estimatelist_set;
165*swig_spindle_get = *Amanda::Headerc::HeaderXML_spindle_get;
166*swig_spindle_set = *Amanda::Headerc::HeaderXML_spindle_set;
167*swig_compress_get = *Amanda::Headerc::HeaderXML_compress_get;
168*swig_compress_set = *Amanda::Headerc::HeaderXML_compress_set;
169*swig_encrypt_get = *Amanda::Headerc::HeaderXML_encrypt_get;
170*swig_encrypt_set = *Amanda::Headerc::HeaderXML_encrypt_set;
171*swig_kencrypt_get = *Amanda::Headerc::HeaderXML_kencrypt_get;
172*swig_kencrypt_set = *Amanda::Headerc::HeaderXML_kencrypt_set;
173*swig_levellist_get = *Amanda::Headerc::HeaderXML_levellist_get;
174*swig_levellist_set = *Amanda::Headerc::HeaderXML_levellist_set;
175*swig_nb_level_get = *Amanda::Headerc::HeaderXML_nb_level_get;
176*swig_nb_level_set = *Amanda::Headerc::HeaderXML_nb_level_set;
177*swig_dumpdate_get = *Amanda::Headerc::HeaderXML_dumpdate_get;
178*swig_dumpdate_set = *Amanda::Headerc::HeaderXML_dumpdate_set;
179*swig_compprog_get = *Amanda::Headerc::HeaderXML_compprog_get;
180*swig_compprog_set = *Amanda::Headerc::HeaderXML_compprog_set;
181*swig_srv_encrypt_get = *Amanda::Headerc::HeaderXML_srv_encrypt_get;
182*swig_srv_encrypt_set = *Amanda::Headerc::HeaderXML_srv_encrypt_set;
183*swig_clnt_encrypt_get = *Amanda::Headerc::HeaderXML_clnt_encrypt_get;
184*swig_clnt_encrypt_set = *Amanda::Headerc::HeaderXML_clnt_encrypt_set;
185*swig_srv_decrypt_opt_get = *Amanda::Headerc::HeaderXML_srv_decrypt_opt_get;
186*swig_srv_decrypt_opt_set = *Amanda::Headerc::HeaderXML_srv_decrypt_opt_set;
187*swig_clnt_decrypt_opt_get = *Amanda::Headerc::HeaderXML_clnt_decrypt_opt_get;
188*swig_clnt_decrypt_opt_set = *Amanda::Headerc::HeaderXML_clnt_decrypt_opt_set;
189*swig_record_get = *Amanda::Headerc::HeaderXML_record_get;
190*swig_record_set = *Amanda::Headerc::HeaderXML_record_set;
191*swig_create_index_get = *Amanda::Headerc::HeaderXML_create_index_get;
192*swig_create_index_set = *Amanda::Headerc::HeaderXML_create_index_set;
193*swig_auth_get = *Amanda::Headerc::HeaderXML_auth_get;
194*swig_auth_set = *Amanda::Headerc::HeaderXML_auth_set;
195*swig_exclude_file_get = *Amanda::Headerc::HeaderXML_exclude_file_get;
196*swig_exclude_file_set = *Amanda::Headerc::HeaderXML_exclude_file_set;
197*swig_exclude_list_get = *Amanda::Headerc::HeaderXML_exclude_list_get;
198*swig_exclude_list_set = *Amanda::Headerc::HeaderXML_exclude_list_set;
199*swig_include_file_get = *Amanda::Headerc::HeaderXML_include_file_get;
200*swig_include_file_set = *Amanda::Headerc::HeaderXML_include_file_set;
201*swig_include_list_get = *Amanda::Headerc::HeaderXML_include_list_get;
202*swig_include_list_set = *Amanda::Headerc::HeaderXML_include_list_set;
203*swig_exclude_optional_get = *Amanda::Headerc::HeaderXML_exclude_optional_get;
204*swig_exclude_optional_set = *Amanda::Headerc::HeaderXML_exclude_optional_set;
205*swig_include_optional_get = *Amanda::Headerc::HeaderXML_include_optional_get;
206*swig_include_optional_set = *Amanda::Headerc::HeaderXML_include_optional_set;
207*swig_application_property_get = *Amanda::Headerc::HeaderXML_application_property_get;
208*swig_application_property_set = *Amanda::Headerc::HeaderXML_application_property_set;
209*swig_scriptlist_get = *Amanda::Headerc::HeaderXML_scriptlist_get;
210*swig_scriptlist_set = *Amanda::Headerc::HeaderXML_scriptlist_set;
211*swig_data_path_get = *Amanda::Headerc::HeaderXML_data_path_get;
212*swig_data_path_set = *Amanda::Headerc::HeaderXML_data_path_set;
213*swig_directtcp_list_get = *Amanda::Headerc::HeaderXML_directtcp_list_get;
214*swig_directtcp_list_set = *Amanda::Headerc::HeaderXML_directtcp_list_set;
215*swig_next_get = *Amanda::Headerc::HeaderXML_next_get;
216*swig_next_set = *Amanda::Headerc::HeaderXML_next_set;
217sub new {
218    my $pkg = shift;
219    my $self = Amanda::Headerc::new_HeaderXML(@_);
220    bless $self, $pkg if defined($self);
221}
222
223sub DESTROY {
224    return unless $_[0]->isa('HASH');
225    my $self = tied(%{$_[0]});
226    return unless defined $self;
227    delete $ITERATORS{$self};
228    if (exists $OWNER{$self}) {
229        Amanda::Headerc::delete_HeaderXML($self);
230        delete $OWNER{$self};
231    }
232}
233
234sub DISOWN {
235    my $self = shift;
236    my $ptr = tied(%$self);
237    delete $OWNER{$ptr};
238}
239
240sub ACQUIRE {
241    my $self = shift;
242    my $ptr = tied(%$self);
243    $OWNER{$ptr} = 1;
244}
245
246
247# ------- VARIABLE STUBS --------
248
249package Amanda::Header;
250
251*F_UNKNOWN = *Amanda::Headerc::F_UNKNOWN;
252*F_WEIRD = *Amanda::Headerc::F_WEIRD;
253*F_TAPESTART = *Amanda::Headerc::F_TAPESTART;
254*F_TAPEEND = *Amanda::Headerc::F_TAPEEND;
255*F_DUMPFILE = *Amanda::Headerc::F_DUMPFILE;
256*F_CONT_DUMPFILE = *Amanda::Headerc::F_CONT_DUMPFILE;
257*F_SPLIT_DUMPFILE = *Amanda::Headerc::F_SPLIT_DUMPFILE;
258*F_EMPTY = *Amanda::Headerc::F_EMPTY;
259
260@EXPORT_OK = ();
261%EXPORT_TAGS = ();
262
263
264=head1 NAME
265
266Amanda::Header - Amanda-specific headers prepended to dump files
267
268=head1 SYNOPSIS
269
270  # create a header
271  my $hdr = Amanda::Header->new();
272  $hdr->{type} = $Amanda::Header::F_DUMPFILE;
273  $hdr->{name} = "localhost";
274  $hdr->{disk} = "/home";
275
276  # make a string suitable for use in a dumpfile (NUL-padded)
277  my $block = $hdr->to_string(32768, 32768);
278
279  # parse a string into a header
280  $hdr = Amanda::Header->from_string($block);
281
282  print "Working on: ", $hdr->summary(), "\n";
283
284=head1 Header Objects
285
286Note that, due to the vagaries of SWIG wrapping, headers actually have
287class C<Amanda::Header::Header>.
288
289The constructor creates a new, blank header, which will need at least
290some of its attributes set before being used.  These are set just like
291any hashref-based object:
292
293 $hdr->{'dumplevel'} = 13;
294
295To construct a new object from a bytestring (as read from the
296beginning of a dumpfile), use
297
298 Amanda::Header->from_string($data);
299
300To convert a header object into a bytestring, use the C<to_string(min,
301max)> method.  This method takes a minimum and maximum size.  If the
302header is smaller than the minimum size, it is padded with NUL bytes;
303if it would be larger than the maximum size, the method returns
304C<undef>.
305
306The C<summary> method returns a single-line summary of the header, with
307no trailing newline.
308
309As a debugging utility, the C<debug_dump> method dumps the contents of
310the object to the debug log.
311
312To compare a header to a list of dumpspecs (see L<Amanda::Cmdline>), use
313
314  if ($hdr->matches_dumpspecs([@dumpspecs])) { ... }
315
316which is really a call to C<Amanda::Cmdline::header_matches_dumpspecs>.
317
318A header object has the following keys:
319
320 type
321 datestamp
322 dumplevel
323 compressed
324 encrypted
325 comp_suffix
326 encrypt_suffix
327 name               hostname (F_DUMPFILE) or label (F_TAPESTART)
328 disk
329 program
330 application
331 srvcompprog
332 clntcompprog
333 srv_encrypt
334 clnt_encrypt
335 recover_cmd
336 uncompress_cmd
337 decrypt_cmd
338 srv_decrypt_opt
339 clnt_decrypt_opt
340 cont_filename
341 dle_str
342 is_partial
343 partnum
344 totalparts         (-1 == UNKNOWN)
345 blocksize
346 orig_size
347
348C<type> is one of the following constants, which are availble for
349import in the tag C<:constants>:
350
351 F_UNKNOWN
352 F_WEIRD
353 F_TAPESTART
354 F_TAPEEND
355 F_DUMPFILE
356 F_CONT_DUMPFILE
357 F_SPLIT_DUMPFILE
358 F_EMPTY
359 F_NOOP
360
361Some of the header fields are interrelated.  The following restrictions apply.
362
363=over 4
364
365=item *
366
367C<comp_suffix> is set if and only if C<compressed> is true; the suffix "N" is
368reserved and cannot be used.
369
370=item *
371
372C<encrypt_suffix> is set if and only if C<encrypted> is true; the suffix "N" is
373reserved and cannot be used.
374
375=item *
376
377If C<totalparts> is not -1, then C<partnum> must be less than or equal to
378C<totalparts>.  Neither parameter can be zero.  These parameters are only
379recorded in a C<F_SPLIT_DUMPFILE> header.
380
381=item *
382
383The C<blocksize> is intended for the user's convenience only.  It is written to
384the header string, but not parsed on return.  C<from_string> will always return
385a header with blocksize=0.
386
387=item *
388
389Like C<blocksize>, C<recover_cmd>, C<uncompress_cmd> and C<decrypt_cmd> are
390intended for the user's convenience noly.  The C<uncompress_cmd> and
391C<decrypt_cmd>, if specified, must end with C<|> (the shell pipe character).
392Neither can be nonempty unless C<recover_cmd> is also nonempty.  When parsing a
393header with only two commands from a string, it is ambiguous whether the first
394string is for decryption or uncompression, and this package assumes
395uncompression.
396
397=back
398
399=cut
400
401
402
403push @EXPORT_OK, qw(filetype_t_to_string);
404push @{$EXPORT_TAGS{"filetype_t"}}, qw(filetype_t_to_string);
405
406my %_filetype_t_VALUES;
407#Convert an enum value to a single string
408sub filetype_t_to_string {
409    my ($enumval) = @_;
410
411    for my $k (keys %_filetype_t_VALUES) {
412	my $v = $_filetype_t_VALUES{$k};
413
414	#is this a matching flag?
415	if ($enumval == $v) {
416	    return $k;
417	}
418    }
419
420#default, just return the number
421    return $enumval;
422}
423
424push @EXPORT_OK, qw($F_UNKNOWN);
425push @{$EXPORT_TAGS{"filetype_t"}}, qw($F_UNKNOWN);
426
427$_filetype_t_VALUES{"F_UNKNOWN"} = $F_UNKNOWN;
428
429push @EXPORT_OK, qw($F_WEIRD);
430push @{$EXPORT_TAGS{"filetype_t"}}, qw($F_WEIRD);
431
432$_filetype_t_VALUES{"F_WEIRD"} = $F_WEIRD;
433
434push @EXPORT_OK, qw($F_TAPESTART);
435push @{$EXPORT_TAGS{"filetype_t"}}, qw($F_TAPESTART);
436
437$_filetype_t_VALUES{"F_TAPESTART"} = $F_TAPESTART;
438
439push @EXPORT_OK, qw($F_TAPEEND);
440push @{$EXPORT_TAGS{"filetype_t"}}, qw($F_TAPEEND);
441
442$_filetype_t_VALUES{"F_TAPEEND"} = $F_TAPEEND;
443
444push @EXPORT_OK, qw($F_DUMPFILE);
445push @{$EXPORT_TAGS{"filetype_t"}}, qw($F_DUMPFILE);
446
447$_filetype_t_VALUES{"F_DUMPFILE"} = $F_DUMPFILE;
448
449push @EXPORT_OK, qw($F_CONT_DUMPFILE);
450push @{$EXPORT_TAGS{"filetype_t"}}, qw($F_CONT_DUMPFILE);
451
452$_filetype_t_VALUES{"F_CONT_DUMPFILE"} = $F_CONT_DUMPFILE;
453
454push @EXPORT_OK, qw($F_SPLIT_DUMPFILE);
455push @{$EXPORT_TAGS{"filetype_t"}}, qw($F_SPLIT_DUMPFILE);
456
457$_filetype_t_VALUES{"F_SPLIT_DUMPFILE"} = $F_SPLIT_DUMPFILE;
458
459push @EXPORT_OK, qw($F_EMPTY);
460push @{$EXPORT_TAGS{"filetype_t"}}, qw($F_EMPTY);
461
462$_filetype_t_VALUES{"F_EMPTY"} = $F_EMPTY;
463
464#copy symbols in filetype_t to constants
465push @{$EXPORT_TAGS{"constants"}},  @{$EXPORT_TAGS{"filetype_t"}};
466
467
468# SWIG produces a sub-package for the Header "class", in this case named
469# Amanda::Header::Header.  For user convenience, we allow Amanda::Header->new(..) to
470# do the same thing.  This is a wrapper function, and not just a typeglob assignment,
471# because we want to get the right blessing.
472sub new {
473    shift; # ignore class
474    Amanda::Header::Header->new(@_);
475}
476
477sub from_string {
478    shift; # ignore class
479    return C_from_string(@_);
480}
481
482sub get_dle {
483    my $self = shift;
484
485    if ($self->{'dle_str'}) {
486	return Amanda::Header::HeaderXML->new($self->{'dle_str'});
487    } else {
488	return undef;
489    }
490}
491
492package Amanda::Header::Header;
493
494# point $hdr->matches_dumpspecs() to Amanda::Cmdline::header_matches_dumpspecs.  When
495# Amanda is built with --without-server, Amanda::Cmdline is missing, so this will fail.
496# Note that this assumes the user has already use'd Amanda::Cmdline.
497sub matches_dumpspecs {
498    Amanda::Cmdline::header_matches_dumpspecs(@_);
499}
500
501package Amanda::Header;
5021;
503