package Net::DNS::ToolKit::Question; #use 5.006; use strict; #use diagnostics; #use warnings; use Net::DNS::ToolKit qw( get16 put16 dn_comp dn_expand ); use Net::DNS::Codes qw(TypeTxt ClassTxt); use vars qw($VERSION); $VERSION = do { my @r = (q$Revision: 0.03 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; sub DESTROY {} =head1 NAME Net::DNS::ToolKit::Question - Resource Handler =head1 SYNOPSIS DO NOT use Net::DNS::ToolKit::Question DO NOT require Net::DNS::ToolKit::Question Net::DNS::ToolKit::Question is autoloaded by class Net::DNS::ToolKit::RR and its methods are instantiated in a 'special' manner. =head1 DESCRIPTION =over 4 =item * ($newoff,$name,$type,$class) = $get->Question(\$buffer,$offset); Get question from $buffer. Returns the expanded name, type and class. input: pointer to buffer, offset into buffer returns: new offset, expanded name, type, class =cut sub get { my($self,$bp,$off) = @_; ($off, my $name) = dn_expand($bp,$off); (my $type,$off) = get16($bp,$off); (my $class,$off) = get16($bp,$off); return ($off,$name,$type,$class); } =item * ($newoff,@dnptrs) = $put->Question(\$buffer,$offset, $name,$type,$class,\@dnptrs); Append a question to the $buffer. Returns a new pointer array for compressed names and the offset to the next RR. NOTE: it is up to the user to update the question count. See: L Since the B usually is the first record to be appended to the buffer, @dnptrs may be ommitted. See the details at L. Usage: ($newoff,@dnptrs)=$put->Question(\$buffer,$offset, $name,$type,$class); input: pointer to buffer, offset into buffer, domain name, question type, question class, pointer to array of previously compressed names, returns: offset to next record, updated array of offsets to previous compressed names =cut sub put { my($self,$bp,$off,$name,$type,$class,$dp) = @_; ($off, my @dnptrs)=dn_comp($bp,$off,\$name,$dp); $off = put16($bp,$off,$type); if (! $class && exists $self->{class}) { $class = $self->{class}; } $off = put16($bp,$off,$class); return $off unless wantarray; return($off,@dnptrs); } =item * ($name,$typeTXT,$classTXT) = $parse->Question($name,$type,$class); Convert non-printable and numeric data into ascii text. input: domain name, question type (numeric) question class (numeric) returns: domain name, type TEXT, class TEXT =back =cut sub parse { my($self,$name,$type,$class) = @_; return ($name.'.',TypeTxt->{$type},ClassTxt->{$class}); } =head1 DEPENDENCIES Net::DNS::ToolKit =head1 EXPORT none =head1 AUTHOR Michael Robinton =head1 COPYRIGHT Copyright 2003, Michael Robinton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. =head1 See also: Net::DNS::ToolKit(3) =cut 1;