1package Net::DNS::ToolKit::RR::MB; 2 3use strict; 4#use warnings; 5 6use vars qw($VERSION); 7 8$VERSION = do { my @r = (q$Revision: 0.02 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; 9 10require Net::DNS::ToolKit::RR::NS; 11 12*get = \&Net::DNS::ToolKit::RR::NS::get; 13*put = \&Net::DNS::ToolKit::RR::NS::put; 14*parse = \&Net::DNS::ToolKit::RR::NS::parse; 15 16=head1 NAME 17 18Net::DNS::ToolKit::RR::MB - Resource Record Handler 19 20=head1 SYNOPSIS 21 22 DO NOT use Net::DNS::ToolKit::RR::MB 23 DO NOT require Net::DNS::ToolKit::RR::MB 24 25 Net::DNS::ToolKit::RR::MB is autoloaded by 26 class Net::DNS::ToolKit::RR and its methods 27 are instantiated in a 'special' manner. 28 29 use Net::DNS::ToolKit::RR; 30 ($get,$put,$parse) = new Net::DNS::ToolKit::RR; 31 32 ($newoff,$name,$type,$class,$ttl,$rdlength, 33 $madname) = $get->MB(\$buffer,$offset); 34 35 Note: the $get->MB method is normally called 36 via: @stuff = $get->next(\$buffer,$offset); 37 38 ($newoff,@dnptrs)=$put->MB(\$buffer,$offset,\@dnptrs, 39 $name,$type,$class,$ttl,$madname); 40 41 $NAME,$TYPE,$CLASS,$TTL,$rdlength,$MADNAME) 42 = $parse->XYZ($name,$type,$class,$ttl,$rdlength, 43 $madname); 44 45=head1 DESCRIPTION 46 47B<Net::DNS::ToolKit::RR:MB> appends an MB resource record to a DNS packet under 48construction, recovers an MB resource record from a packet being decoded, and 49converts the numeric/binary portions of the resource record to human 50readable form. 51 52 Description from RFC1035.txt 53 54 3.2.1. Format 55 56 All RRs have the same top level format shown below: 57 58 1 1 1 1 1 1 59 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 60 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 61 | NAME | 62 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 63 | TYPE | 64 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 65 | CLASS | 66 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 67 | TTL | 68 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 69 | RDLENGTH | 70 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--| 71 | RDATA | 72 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 73 74 NAME an owner name, i.e., the name of the node to which this 75 resource record pertains. 76 77 TYPE two octets containing one of the RR TYPE codes. 78 79 CLASS two octets containing one of the RR CLASS codes. 80 81 TTL a 32 bit signed integer that specifies the time interval 82 that the resource record may be cached before the source 83 of the information should again be consulted. Zero 84 values are interpreted to mean that the RR can only be 85 used for the transaction in progress, and should not be 86 cached. For example, SOA records are always distributed 87 with a zero TTL to prohibit caching. Zero values can 88 also be used for extremely volatile data. 89 90 RDLENGTH an unsigned 16 bit integer that specifies the length 91 in octets of the RDATA field. 92 93 RDATA a variable length string of octets that describes the 94 resource. The format of this information varies 95 according to the TYPE and CLASS of the resource record. 96 97 3.3.3. MB RDATA format (EXPERIMENTAL) 98 99 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 100 / MADNAME / 101 / / 102 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 103 104 where: 105 106 MADNAME A <domain-name> which specifies a host which 107 has the specified mailbox. 108 109=over 4 110 111=item * @stuff = $get->MB(\$buffer,$offset); 112 113 Get the contents of the resource record. 114 115 USE: @stuff = $get->next(\$buffer,$offset); 116 117 where: @stuff = ( 118 $newoff $name,$type,$class,$ttl,$rdlength, 119 $madname ); 120 121All except the last item, B<$madname>, is provided by 122the class loader, B<Net::DNS::ToolKit::RR>. The code in this method knows 123how to retrieve B<$madname>. 124 125 input: pointer to buffer, 126 offset into buffer 127 returns: offset to next resource, 128 @common RR elements, 129 MB Domain Name 130 131=item * ($newoff,@dnptrs)=$put->MB(\$buffer,$offset,\@dnptrs, 132 $name,$type,$class,$ttl,$madname); 133 134Append an MB record to $buffer. 135 136 where @common = ( 137 $name,$type,$class,$ttl); 138 139The method will insert the $rdlength and $madname, then 140pass through the updated pointer to the array of compressed names 141 142The class loader, B<Net::DNS::ToolKit::RR>, inserts the @common elements and 143returns updated @dnptrs. This module knows how to insert its RDATA and 144calculate the $rdlength. 145 146 input: pointer to buffer, 147 offset (normally end of buffer), 148 pointer to compressed name array, 149 @common RR elements, 150 MB Domain Name 151 output: offset to next RR, 152 new compressed name pointer array, 153 or empty list () on error. 154 155=item * (@COMMON,$MADNAME) = $parse->MB(@common,$madname); 156 157Converts binary/numeric field data into human readable form. The common RR 158elements are supplied by the class loader, B<Net::DNS::ToolKit::RR>. 159For MB RR's, this returns the $madname terminated with '.' 160 161 input: MB Domain Name 162 returns: MB Domain Name. 163 164=back 165 166=head1 DEPENDENCIES 167 168 Net::DNS::ToolKit 169 Net::DNS::Codes 170 Net::DNS::ToolKit::RR::NS 171 172=head1 EXPORT 173 174 none 175 176=head1 AUTHOR 177 178Michael Robinton <michael@bizsystems.com> 179 180=head1 COPYRIGHT 181 182 Copyright 2003 - 2011, Michael Robinton <michael@bizsystems.com> 183 184Michael Robinton <michael@bizsystems.com> 185 186All rights reserved. 187 188This program is free software; you can redistribute it and/or modify 189it under the terms of either: 190 191 a) the GNU General Public License as published by the Free 192 Software Foundation; either version 2, or (at your option) any 193 later version, or 194 195 b) the "Artistic License" which comes with this distribution. 196 197This program is distributed in the hope that it will be useful, 198but WITHOUT ANY WARRANTY; without even the implied warranty of 199MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either 200the GNU General Public License or the Artistic License for more details. 201 202You should have received a copy of the Artistic License with this 203distribution, in the file named "Artistic". If not, I'll be glad to provide 204one. 205 206You should also have received a copy of the GNU General Public License 207along with this program in the file named "Copying". If not, write to the 208 209 Free Software Foundation, Inc. 210 59 Temple Place, Suite 330 211 Boston, MA 02111-1307, USA 212 213or visit their web page on the internet at: 214 215 http://www.gnu.org/copyleft/gpl.html. 216 217=head1 See also: 218 219Net::DNS::Codes(3), Net::DNS::ToolKit(3) 220 221=cut 222 2231; 224