Imported Upstream version 3.2.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 *last_feature = *Amanda::Featurec::last_feature;
199
200 @EXPORT_OK = ();
201 %EXPORT_TAGS = ();
202
203
204 =head1 NAME
205
206 Amanda::Feature - interface to Amanda feature bitfields
207
208 =head1 SYNOPSIS
209
210     # set up features for this instance and print them
211     my $features = Amanda::Feature::Set->mine();
212     print "my features: $features\n";
213
214     # parse the other side's features
215     my $client_feat = Amanda::Feature::Set->from_string($feat_str);
216
217     # or assume the other side's features are old
218     my $client_feat = Amanda::Feature::Set->old()
219
220     # test for a feature
221     if ($feat->has($Amanda::Feature::fe_options_bsd_auth)) {
222         print "has BSD auth\n";
223     }
224
225 =head1 DESCRIPTION
226
227 C<Amanda::Feature::Set> objects are fairly simple.  The three constructors are
228 shown in the SYNOPSIS: C<mine> (all currently-supported features), C<old> (only
229 the features present in versions of Amanda before features were invented), or
230 C<from_string>.
231
232 An object has three methods to address specific bits:
233
234     # set a bit
235     $feat->add($Amanda::Feature::fe_req_xml);
236
237     # clear a bit
238     $feat->remove($Amanda::Feature::fe_req_xml);
239
240     # test a bit
241     if ($feat->has($Amanda::Feature::fe_req_xml)) ..
242
243 And C<as_string> which converts the feature into a string.
244
245 All features are available in scalars of the same name in the
246 C<Amanda::Feature> namespace.
247
248 =head1 FEATURE DOCUMENTATION
249
250 This section includes as much information as is available for each feature.
251 Each subsection begins with a description of the protocols in
252 which the feature is relevant, and the end on which the feature is relevant.
253 Any known dependencies for the feature are also mentioned.  Assume that any
254 omissions in this section are due to limited information.
255
256 =over 2
257
258 =item fe_recover_splits
259
260  PROTOCOL: amidxtaped
261  FEATURE OF: client
262
263 If set, the recovery application supports a DATA connection on a separate TCP
264 connection.
265
266 Dependencies: this feature is always set when amidxtaped is invoked via
267 amandad.
268
269 =item fe_amidxtaped_exchange_features
270
271  PROTOCOL: amidxtaped
272  FEATURE OF: server
273
274 If set, amidxtaped can process the FEATURES= line in the command.
275 The flag is actually tested by amrecover on amindexd's feature matrix, due to
276 ordering constraints, so it assumes that amindexd and amidxtaped have the same
277 features.
278
279 =item fe_amrecover_FEEDME
280
281  PROTOCOL: amidxtaped
282  FEATURE OF: client
283
284 If set, amrecover understands FEEDME lines on the control connection.
285
286 Dependencies: this feature can only be set if fe_recover_splits is set.
287
288 =item fe_amrecover_timestamp
289
290  PROTOCOL: amindexd
291  FEATURE OF: client
292
293 If set, the recovery application supports full timestamps; otherwise, it can
294 only process datestamps.
295
296 =item fe_amidxtaped_options_hostname
297
298 =item fe_amidxtaped_options_features
299
300 =item fe_amidxtaped_options_auth
301
302  PROTOCOL: amidxtaped
303  FEATURE OF: server
304
305 These feature flags indicate what fields amidxtaped supports in the OPTIONS
306 line.  Of course, the client would need to know these features before it
307 received the OPTIONS line, which would necessitate sending a NOOP request
308 first.  In practice, they are completely unused.
309
310 =item fe_amrecover_message
311
312  PROTOCOL: amidxtaped
313  FEATURE OF: client
314
315 If set, the recovery applications understands MESSAGE lines on the control connection.
316
317 Dependencies: a control connection only exists if amidxtaped is launched from
318 amandad or I<fe_recover_splits> is used.
319
320 =item fe_amrecover_feedme_tape
321
322  PROTOCOL: amidxtaped
323  FEATURE OF: server
324
325 If set, amidxtaped recognizes the TAPE response to FEEDME.
326
327 =item fe_amrecover_dle_in_header
328
329 =item fe_amrecover_origsize_in_header
330
331  PROTOCOL: amidxtaped
332  FEATURE OF: client
333
334 If set, amrecover can process a header containing the corresponding attribute.
335 If not set, the attribute should be stripped from any headers sent to
336 amrecover.
337
338  Feature                Header Attribute
339  -------                ----------------
340  dle_in_header          dle_str
341  origsize_in_header     orig_size
342
343 =item fe_amidxtaped_abort
344
345  PROTOCOL: amidxtaped
346  FEATURE OF: server
347
348 If set, amidxtaped can handle an ABORT message just before the datapath
349 negotiation begins.
350
351 =item fe_amidxtaped_datapath
352
353  PROTOCOL: amidxtaped
354  FEATURE OF: client and server
355
356 If set on the client, then amrecover expects the server to start a DATAPATH
357 negotiation after the header is sent.  If set on the server, then amrecover can
358 process a DATAPATH negotiation after the header is sent.  In other words, the
359 feature must be present on both sides for this negotiation to take place.  The
360 DATAPATH negotiation is a three-way handshake:
361
362   AVAIL-DATAPATH <datapath list>         # to amidxtaped
363   USE-DATAPATH <datapath> [<ip:port> ..] # from amidxtaped
364   DATAPATH-OK                            # to amidxtaped
365
366 No data may be transmitted until the handshake is complete.  See the wiki
367 article entitled "amidxtaped protocol" for more detail.
368
369 =item fe_amidxtaped_fsf
370
371 =item fe_amidxtaped_label
372
373 =item fe_amidxtaped_device
374
375 =item fe_amidxtaped_host
376
377 =item fe_amidxtaped_disk
378
379 =item fe_amidxtaped_datestamp
380
381 =item fe_amidxtaped_header
382
383 =item fe_amidxtaped_config
384
385  PROTOCOL: amidxtaped
386  FEATURE OF: server
387
388 If set, each feature means that amidxtaped can process the corresponding
389 command line.  Note that I<fe_amidxtaped_label> does not indicate whether that
390 field contains a label or a tapespec.
391
392 =item fe_amidxtaped_nargs
393
394  PROTOCOL: amidxtaped
395  FEATURE OF: server
396
397 If set, then amidxtaped can handle the "nargs" form of a command: The first
398 line was the number of arguments, folloewd by one argument by line.  Amidxtaped
399 forked amrestore with these arguments.
400
401 This feature is no longer supported.
402
403 =item fe_amrecover_correct_disk_quoting
404
405  PROTOCOL: amidxtaped
406  FEATURE OF: amrecover
407
408 Amrecovers that do not have this flag may send incorrectly-quoted DISK lines, so
409 those DISK lines should be ignored.
410
411 =item fe_amindexd_quote_label
412
413  PROTOCOL: amindexd
414  FEATURE OF: server
415
416 If set, amindexd quote the label (holdingdisk filename)
417
418 =back
419
420 =cut
421
422
423
424 package Amanda::Feature::Set;
425
426 # this does not work, because SWIG uses the string value of objects as a hash key
427 # even after calling their destructor, which leads to a segfault.
428 #
429 # use overload '""' => sub { $_[0]->as_string(); };
430
431 sub Amanda::Feature::Set::from_string {
432     my $class = shift;
433     return Amanda::Feature::am_string_to_feature(@_);
434 }
435
436 sub Amanda::Feature::Set::old {
437     my $class = shift;
438     return Amanda::Feature::am_set_default_feature_set();
439 }
440
441 sub Amanda::Feature::Set::mine {
442     my $class = shift;
443     return Amanda::Feature::am_init_feature_set();
444 }
445
446 package Amanda::Feature;
447
448 1;