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