Imported Upstream version 3.3.0
[debian/amanda] / perl / Amanda / Feature.pm
1 # This file was automatically generated by SWIG (http://www.swig.org).
2 # Version 1.3.39
3 #
4 # Do not make changes to this file unless you know what you are doing--modify
5 # the SWIG interface file instead.
6
7 package Amanda::Feature;
8 use base qw(Exporter);
9 use base qw(DynaLoader);
10 package Amanda::Featurec;
11 bootstrap Amanda::Feature;
12 package Amanda::Feature;
13 @EXPORT = qw();
14
15 # ---------- BASE METHODS -------------
16
17 package Amanda::Feature;
18
19 sub TIEHASH {
20     my ($classname,$obj) = @_;
21     return bless $obj, $classname;
22 }
23
24 sub CLEAR { }
25
26 sub FIRSTKEY { }
27
28 sub NEXTKEY { }
29
30 sub FETCH {
31     my ($self,$field) = @_;
32     my $member_func = "swig_${field}_get";
33     $self->$member_func();
34 }
35
36 sub STORE {
37     my ($self,$field,$newval) = @_;
38     my $member_func = "swig_${field}_set";
39     $self->$member_func($newval);
40 }
41
42 sub this {
43     my $ptr = shift;
44     return tied(%$ptr);
45 }
46
47
48 # ------- FUNCTION WRAPPERS --------
49
50 package Amanda::Feature;
51
52 *am_string_to_feature = *Amanda::Featurec::am_string_to_feature;
53 *am_set_default_feature_set = *Amanda::Featurec::am_set_default_feature_set;
54 *am_init_feature_set = *Amanda::Featurec::am_init_feature_set;
55
56 ############# Class : Amanda::Feature::Set ##############
57
58 package Amanda::Feature::Set;
59 use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
60 @ISA = qw( Amanda::Feature );
61 %OWNER = ();
62 %ITERATORS = ();
63 sub DESTROY {
64     return unless $_[0]->isa('HASH');
65     my $self = tied(%{$_[0]});
66     return unless defined $self;
67     delete $ITERATORS{$self};
68     if (exists $OWNER{$self}) {
69         Amanda::Featurec::delete_Set($self);
70         delete $OWNER{$self};
71     }
72 }
73
74 *add = *Amanda::Featurec::Set_add;
75 *remove = *Amanda::Featurec::Set_remove;
76 *has = *Amanda::Featurec::Set_has;
77 *as_string = *Amanda::Featurec::Set_as_string;
78 sub new {
79     my $pkg = shift;
80     my $self = Amanda::Featurec::new_Set(@_);
81     bless $self, $pkg if defined($self);
82 }
83
84 sub DISOWN {
85     my $self = shift;
86     my $ptr = tied(%$self);
87     delete $OWNER{$ptr};
88 }
89
90 sub ACQUIRE {
91     my $self = shift;
92     my $ptr = tied(%$self);
93     $OWNER{$ptr} = 1;
94 }
95
96
97 # ------- VARIABLE STUBS --------
98
99 package Amanda::Feature;
100
101 *have_feature_support = *Amanda::Featurec::have_feature_support;
102 *fe_options_auth = *Amanda::Featurec::fe_options_auth;
103 *fe_selfcheck_req = *Amanda::Featurec::fe_selfcheck_req;
104 *fe_selfcheck_req_device = *Amanda::Featurec::fe_selfcheck_req_device;
105 *fe_selfcheck_rep = *Amanda::Featurec::fe_selfcheck_rep;
106 *fe_sendsize_req_no_options = *Amanda::Featurec::fe_sendsize_req_no_options;
107 *fe_sendsize_req_options = *Amanda::Featurec::fe_sendsize_req_options;
108 *fe_sendsize_req_device = *Amanda::Featurec::fe_sendsize_req_device;
109 *fe_sendsize_rep = *Amanda::Featurec::fe_sendsize_rep;
110 *fe_sendbackup_req = *Amanda::Featurec::fe_sendbackup_req;
111 *fe_sendbackup_req_device = *Amanda::Featurec::fe_sendbackup_req_device;
112 *fe_sendbackup_rep = *Amanda::Featurec::fe_sendbackup_rep;
113 *fe_noop_req = *Amanda::Featurec::fe_noop_req;
114 *fe_noop_rep = *Amanda::Featurec::fe_noop_rep;
115 *fe_program_dump = *Amanda::Featurec::fe_program_dump;
116 *fe_program_gnutar = *Amanda::Featurec::fe_program_gnutar;
117 *fe_program_application_api = *Amanda::Featurec::fe_program_application_api;
118 *fe_options_compress_fast = *Amanda::Featurec::fe_options_compress_fast;
119 *fe_options_compress_best = *Amanda::Featurec::fe_options_compress_best;
120 *fe_options_srvcomp_fast = *Amanda::Featurec::fe_options_srvcomp_fast;
121 *fe_options_srvcomp_best = *Amanda::Featurec::fe_options_srvcomp_best;
122 *fe_options_no_record = *Amanda::Featurec::fe_options_no_record;
123 *fe_options_index = *Amanda::Featurec::fe_options_index;
124 *fe_options_exclude_file = *Amanda::Featurec::fe_options_exclude_file;
125 *fe_options_exclude_list = *Amanda::Featurec::fe_options_exclude_list;
126 *fe_options_multiple_exclude = *Amanda::Featurec::fe_options_multiple_exclude;
127 *fe_options_optional_exclude = *Amanda::Featurec::fe_options_optional_exclude;
128 *fe_options_include_file = *Amanda::Featurec::fe_options_include_file;
129 *fe_options_include_list = *Amanda::Featurec::fe_options_include_list;
130 *fe_options_multiple_include = *Amanda::Featurec::fe_options_multiple_include;
131 *fe_options_optional_include = *Amanda::Featurec::fe_options_optional_include;
132 *fe_options_bsd_auth = *Amanda::Featurec::fe_options_bsd_auth;
133 *fe_options_krb4_auth = *Amanda::Featurec::fe_options_krb4_auth;
134 *fe_options_kencrypt = *Amanda::Featurec::fe_options_kencrypt;
135 *fe_req_options_maxdumps = *Amanda::Featurec::fe_req_options_maxdumps;
136 *fe_req_options_hostname = *Amanda::Featurec::fe_req_options_hostname;
137 *fe_req_options_features = *Amanda::Featurec::fe_req_options_features;
138 *fe_rep_options_maxdumps = *Amanda::Featurec::fe_rep_options_maxdumps;
139 *fe_rep_options_hostname = *Amanda::Featurec::fe_rep_options_hostname;
140 *fe_rep_options_features = *Amanda::Featurec::fe_rep_options_features;
141 *fe_rep_options_sendbackup_options = *Amanda::Featurec::fe_rep_options_sendbackup_options;
142 *fe_amindexd_fileno_in_OLSD = *Amanda::Featurec::fe_amindexd_fileno_in_OLSD;
143 *fe_amindexd_fileno_in_ORLD = *Amanda::Featurec::fe_amindexd_fileno_in_ORLD;
144 *fe_amidxtaped_fsf = *Amanda::Featurec::fe_amidxtaped_fsf;
145 *fe_amidxtaped_label = *Amanda::Featurec::fe_amidxtaped_label;
146 *fe_amidxtaped_device = *Amanda::Featurec::fe_amidxtaped_device;
147 *fe_amidxtaped_host = *Amanda::Featurec::fe_amidxtaped_host;
148 *fe_amidxtaped_disk = *Amanda::Featurec::fe_amidxtaped_disk;
149 *fe_amidxtaped_datestamp = *Amanda::Featurec::fe_amidxtaped_datestamp;
150 *fe_amidxtaped_header = *Amanda::Featurec::fe_amidxtaped_header;
151 *fe_amidxtaped_nargs = *Amanda::Featurec::fe_amidxtaped_nargs;
152 *fe_amidxtaped_config = *Amanda::Featurec::fe_amidxtaped_config;
153 *fe_partial_estimate = *Amanda::Featurec::fe_partial_estimate;
154 *fe_calcsize_estimate = *Amanda::Featurec::fe_calcsize_estimate;
155 *fe_selfcheck_calcsize = *Amanda::Featurec::fe_selfcheck_calcsize;
156 *fe_recover_splits = *Amanda::Featurec::fe_recover_splits;
157 *fe_amidxtaped_exchange_features = *Amanda::Featurec::fe_amidxtaped_exchange_features;
158 *fe_options_compress_cust = *Amanda::Featurec::fe_options_compress_cust;
159 *fe_options_srvcomp_cust = *Amanda::Featurec::fe_options_srvcomp_cust;
160 *fe_options_encrypt_cust = *Amanda::Featurec::fe_options_encrypt_cust;
161 *fe_options_encrypt_serv_cust = *Amanda::Featurec::fe_options_encrypt_serv_cust;
162 *fe_options_client_decrypt_option = *Amanda::Featurec::fe_options_client_decrypt_option;
163 *fe_options_server_decrypt_option = *Amanda::Featurec::fe_options_server_decrypt_option;
164 *fe_amindexd_marshall_in_OLSD = *Amanda::Featurec::fe_amindexd_marshall_in_OLSD;
165 *fe_amindexd_marshall_in_ORLD = *Amanda::Featurec::fe_amindexd_marshall_in_ORLD;
166 *fe_amindexd_marshall_in_DHST = *Amanda::Featurec::fe_amindexd_marshall_in_DHST;
167 *fe_amrecover_FEEDME = *Amanda::Featurec::fe_amrecover_FEEDME;
168 *fe_amrecover_timestamp = *Amanda::Featurec::fe_amrecover_timestamp;
169 *fe_interface_quoted_text = *Amanda::Featurec::fe_interface_quoted_text;
170 *fe_program_star = *Amanda::Featurec::fe_program_star;
171 *fe_amindexd_options_hostname = *Amanda::Featurec::fe_amindexd_options_hostname;
172 *fe_amindexd_options_features = *Amanda::Featurec::fe_amindexd_options_features;
173 *fe_amindexd_options_auth = *Amanda::Featurec::fe_amindexd_options_auth;
174 *fe_amidxtaped_options_hostname = *Amanda::Featurec::fe_amidxtaped_options_hostname;
175 *fe_amidxtaped_options_features = *Amanda::Featurec::fe_amidxtaped_options_features;
176 *fe_amidxtaped_options_auth = *Amanda::Featurec::fe_amidxtaped_options_auth;
177 *fe_amrecover_message = *Amanda::Featurec::fe_amrecover_message;
178 *fe_amrecover_feedme_tape = *Amanda::Featurec::fe_amrecover_feedme_tape;
179 *fe_req_options_config = *Amanda::Featurec::fe_req_options_config;
180 *fe_rep_sendsize_quoted_error = *Amanda::Featurec::fe_rep_sendsize_quoted_error;
181 *fe_req_xml = *Amanda::Featurec::fe_req_xml;
182 *fe_pp_script = *Amanda::Featurec::fe_pp_script;
183 *fe_amindexd_DLE = *Amanda::Featurec::fe_amindexd_DLE;
184 *fe_amrecover_dle_in_header = *Amanda::Featurec::fe_amrecover_dle_in_header;
185 *fe_xml_estimate = *Amanda::Featurec::fe_xml_estimate;
186 *fe_xml_property_priority = *Amanda::Featurec::fe_xml_property_priority;
187 *fe_sendsize_rep_warning = *Amanda::Featurec::fe_sendsize_rep_warning;
188 *fe_xml_estimatelist = *Amanda::Featurec::fe_xml_estimatelist;
189 *fe_xml_level_server = *Amanda::Featurec::fe_xml_level_server;
190 *fe_xml_data_path = *Amanda::Featurec::fe_xml_data_path;
191 *fe_xml_directtcp_list = *Amanda::Featurec::fe_xml_directtcp_list;
192 *fe_amidxtaped_datapath = *Amanda::Featurec::fe_amidxtaped_datapath;
193 *fe_sendbackup_noop = *Amanda::Featurec::fe_sendbackup_noop;
194 *fe_amrecover_origsize_in_header = *Amanda::Featurec::fe_amrecover_origsize_in_header;
195 *fe_amidxtaped_abort = *Amanda::Featurec::fe_amidxtaped_abort;
196 *fe_amrecover_correct_disk_quoting = *Amanda::Featurec::fe_amrecover_correct_disk_quoting;
197 *fe_amindexd_quote_label = *Amanda::Featurec::fe_amindexd_quote_label;
198 *fe_amrecover_receive_unfiltered = *Amanda::Featurec::fe_amrecover_receive_unfiltered;
199 *fe_application_client_name = *Amanda::Featurec::fe_application_client_name;
200 *fe_script_client_name = *Amanda::Featurec::fe_script_client_name;
201 *last_feature = *Amanda::Featurec::last_feature;
202
203 @EXPORT_OK = ();
204 %EXPORT_TAGS = ();
205
206
207 =head1 NAME
208
209 Amanda::Feature - interface to Amanda feature bitfields
210
211 =head1 SYNOPSIS
212
213     # set up features for this instance and print them
214     my $features = Amanda::Feature::Set->mine();
215     print "my features: $features\n";
216
217     # parse the other side's features
218     my $client_feat = Amanda::Feature::Set->from_string($feat_str);
219
220     # or assume the other side's features are old
221     my $client_feat = Amanda::Feature::Set->old()
222
223     # test for a feature
224     if ($feat->has($Amanda::Feature::fe_options_bsd_auth)) {
225         print "has BSD auth\n";
226     }
227
228 =head1 DESCRIPTION
229
230 C<Amanda::Feature::Set> objects are fairly simple.  The three constructors are
231 shown in the SYNOPSIS: C<mine> (all currently-supported features), C<old> (only
232 the features present in versions of Amanda before features were invented), or
233 C<from_string>.
234
235 An object has three methods to address specific bits:
236
237     # set a bit
238     $feat->add($Amanda::Feature::fe_req_xml);
239
240     # clear a bit
241     $feat->remove($Amanda::Feature::fe_req_xml);
242
243     # test a bit
244     if ($feat->has($Amanda::Feature::fe_req_xml)) ..
245
246 And C<as_string> which converts the feature into a string.
247
248 All features are available in scalars of the same name in the
249 C<Amanda::Feature> namespace.
250
251 =head1 FEATURE DOCUMENTATION
252
253 This section includes as much information as is available for each feature.
254 Each subsection begins with a description of the protocols in
255 which the feature is relevant, and the end on which the feature is relevant.
256 Any known dependencies for the feature are also mentioned.  Assume that any
257 omissions in this section are due to limited information.
258
259 =over 2
260
261 =item fe_recover_splits
262
263  PROTOCOL: amidxtaped
264  FEATURE OF: client
265
266 If set, the recovery application supports a DATA connection on a separate TCP
267 connection.
268
269 Dependencies: this feature is always set when amidxtaped is invoked via
270 amandad.
271
272 =item fe_amidxtaped_exchange_features
273
274  PROTOCOL: amidxtaped
275  FEATURE OF: server
276
277 If set, amidxtaped can process the FEATURES= line in the command.
278 The flag is actually tested by amrecover on amindexd's feature matrix, due to
279 ordering constraints, so it assumes that amindexd and amidxtaped have the same
280 features.
281
282 =item fe_amrecover_FEEDME
283
284  PROTOCOL: amidxtaped
285  FEATURE OF: client
286
287 If set, amrecover understands FEEDME lines on the control connection.
288
289 Dependencies: this feature can only be set if fe_recover_splits is set.
290
291 =item fe_amrecover_timestamp
292
293  PROTOCOL: amindexd
294  FEATURE OF: client
295
296 If set, the recovery application supports full timestamps; otherwise, it can
297 only process datestamps.
298
299 =item fe_amidxtaped_options_hostname
300
301 =item fe_amidxtaped_options_features
302
303 =item fe_amidxtaped_options_auth
304
305  PROTOCOL: amidxtaped
306  FEATURE OF: server
307
308 These feature flags indicate what fields amidxtaped supports in the OPTIONS
309 line.  Of course, the client would need to know these features before it
310 received the OPTIONS line, which would necessitate sending a NOOP request
311 first.  In practice, they are completely unused.
312
313 =item fe_amrecover_message
314
315  PROTOCOL: amidxtaped
316  FEATURE OF: client
317
318 If set, the recovery applications understands MESSAGE lines on the control connection.
319
320 Dependencies: a control connection only exists if amidxtaped is launched from
321 amandad or I<fe_recover_splits> is used.
322
323 =item fe_amrecover_feedme_tape
324
325  PROTOCOL: amidxtaped
326  FEATURE OF: server
327
328 If set, amidxtaped recognizes the TAPE response to FEEDME.
329
330 =item fe_amrecover_dle_in_header
331
332 =item fe_amrecover_origsize_in_header
333
334  PROTOCOL: amidxtaped
335  FEATURE OF: client
336
337 If set, amrecover can process a header containing the corresponding attribute.
338 If not set, the attribute should be stripped from any headers sent to
339 amrecover.
340
341  Feature                Header Attribute
342  -------                ----------------
343  dle_in_header          dle_str
344  origsize_in_header     orig_size
345
346 =item fe_amidxtaped_abort
347
348  PROTOCOL: amidxtaped
349  FEATURE OF: server
350
351 If set, amidxtaped can handle an ABORT message just before the datapath
352 negotiation begins.
353
354 =item fe_amidxtaped_datapath
355
356  PROTOCOL: amidxtaped
357  FEATURE OF: client and server
358
359 If set on the client, then amrecover expects the server to start a DATAPATH
360 negotiation after the header is sent.  If set on the server, then amrecover can
361 process a DATAPATH negotiation after the header is sent.  In other words, the
362 feature must be present on both sides for this negotiation to take place.  The
363 DATAPATH negotiation is a three-way handshake:
364
365   AVAIL-DATAPATH <datapath list>         # to amidxtaped
366   USE-DATAPATH <datapath> [<ip:port> ..] # from amidxtaped
367   DATAPATH-OK                            # to amidxtaped
368
369 No data may be transmitted until the handshake is complete.  See the wiki
370 article entitled "amidxtaped protocol" for more detail.
371
372 =item fe_amidxtaped_fsf
373
374 =item fe_amidxtaped_label
375
376 =item fe_amidxtaped_device
377
378 =item fe_amidxtaped_host
379
380 =item fe_amidxtaped_disk
381
382 =item fe_amidxtaped_datestamp
383
384 =item fe_amidxtaped_header
385
386 =item fe_amidxtaped_config
387
388  PROTOCOL: amidxtaped
389  FEATURE OF: server
390
391 If set, each feature means that amidxtaped can process the corresponding
392 command line.  Note that I<fe_amidxtaped_label> does not indicate whether that
393 field contains a label or a tapespec.
394
395 =item fe_amidxtaped_nargs
396
397  PROTOCOL: amidxtaped
398  FEATURE OF: server
399
400 If set, then amidxtaped can handle the "nargs" form of a command: The first
401 line was the number of arguments, folloewd by one argument by line.  Amidxtaped
402 forked amrestore with these arguments.
403
404 This feature is no longer supported.
405
406 =item fe_amrecover_correct_disk_quoting
407
408  PROTOCOL: amidxtaped
409  FEATURE OF: amrecover
410
411 Amrecovers that do not have this flag may send incorrectly-quoted DISK lines, so
412 those DISK lines should be ignored.
413
414 =item fe_amindexd_quote_label
415
416  PROTOCOL: amindexd
417  FEATURE OF: server
418
419 If set, amindexd quote the label (holdingdisk filename)
420
421 =item fe_amrecover_receive_unfiltered
422
423  PROTOCOL: amidxtaped
424  FEATURE OF: client
425
426 If set, amidxtaped do not decompress/decrypt client compressed/decrypted stream.
427
428 =back
429
430 =cut
431
432
433
434 package Amanda::Feature::Set;
435
436 # this does not work, because SWIG uses the string value of objects as a hash key
437 # even after calling their destructor, which leads to a segfault.
438 #
439 # use overload '""' => sub { $_[0]->as_string(); };
440
441 sub Amanda::Feature::Set::from_string {
442     my $class = shift;
443     return Amanda::Feature::am_string_to_feature(@_);
444 }
445
446 sub Amanda::Feature::Set::old {
447     my $class = shift;
448     return Amanda::Feature::am_set_default_feature_set();
449 }
450
451 sub Amanda::Feature::Set::mine {
452     my $class = shift;
453     return Amanda::Feature::am_init_feature_set();
454 }
455
456 package Amanda::Feature;
457
458 1;