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