D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
proc
/
self
/
root
/
lib64
/
perl5
/
vendor_perl
/
Net
/
DNS
/
RR
/
Filename :
TXT.pm
back
Copy
package Net::DNS::RR::TXT; # # $Id: TXT.pm 1079 2012-12-14 21:30:38Z willem $ # use vars qw($VERSION); $VERSION = (qw$LastChangedRevision: 1079 $)[1]; use base Net::DNS::RR; =encoding utf8 =head1 NAME Net::DNS::RR::TXT - DNS TXT resource record =cut use strict; use integer; use Carp; use Net::DNS::Text; sub decode_rdata { ## decode rdata from wire-format octet string my $self = shift; my ( $data, $offset ) = @_; my $limit = $offset + $self->{rdlength}; my $text; $self->{txtdata} = []; while ( $offset < $limit ) { ( $text, $offset ) = decode Net::DNS::Text( $data, $offset ); push @{$self->{txtdata}}, $text; } croak('corrupt TXT data') unless $offset == $limit; # more or less FUBAR } sub encode_rdata { ## encode rdata as wire-format octet string my $self = shift; my $txtdata = $self->{txtdata} || []; join '', map $_->encode, @$txtdata; } sub format_rdata { ## format rdata portion of RR string. my $self = shift; my $txtdata = $self->{txtdata} || []; join ' ', map $_->string, @$txtdata; } sub parse_rdata { ## populate RR from rdata in argument list my $self = shift; @{$self}{txtdata} = [map Net::DNS::Text->new($_), @_]; } sub txtdata { my $self = shift; @{$self}{txtdata} = [map Net::DNS::Text->new($_), @_] if scalar @_; my $txtdata = $self->{txtdata} || []; return ( map $_->value, @$txtdata ) if wantarray; join ' ', map $_->value, @$txtdata if defined wantarray; } sub char_str_list { ## historical return (&txtdata); } sub rdatastr { ## SpamAssassin workaround, per CPAN RT#81760 my $txtdata = shift->{txtdata} || []; join ' ', map $_->quoted_string, @$txtdata; } package Net::DNS::Text; my $QQ = _decode_utf8( pack 'C', 34 ); sub quoted_string { my $string = shift->string; return $string if $string =~ /^$|\s|["\$'();@]/; # should already be quoted join '', $QQ, $string, $QQ; # quote previously unquoted string } 1; __END__ =head1 SYNOPSIS use Net::DNS; $rr = new Net::DNS::RR( 'name TXT txtdata ...' ); $rr = new Net::DNS::RR( ... txtdata => 'single text string' or txtdata => [ 'multiple', 'strings', ... ] ); use encoding 'utf8'; $rr = new Net::DNS::RR( 'jp TXT 古池や 蛙飛込む 水の音' ); =head1 DESCRIPTION Class for DNS Text (TXT) resource records. =head1 METHODS The available methods are those inherited from the base class augmented by the type-specific methods defined in this package. Use of undocumented package features or direct access to internal data structures is discouraged and could result in program termination or other unpredictable behaviour. =head2 txtdata $string = $rr->txtdata; @list = $rr->txtdata; When invoked in scalar context, txtdata() returns the descriptive text as a single string, regardless of the number of elements. In a list context, txtdata() returns a list of the text elements. =head1 COPYRIGHT Copyright (c)2011 Dick Franks. Package template (c)2009,2012 O.M.Kolkman and R.W.Franks. All rights reserved. This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<perl>, L<Net::DNS>, L<Net::DNS::RR>, RFC1035 Section 3.3.14, RFC3629 =cut