pNet-DNS 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +68 -0
- data/lib/Net/DNS.rb +879 -0
- data/lib/Net/DNS/Header.rb +303 -0
- data/lib/Net/DNS/Nameserver.rb +601 -0
- data/lib/Net/DNS/Packet.rb +851 -0
- data/lib/Net/DNS/Question.rb +117 -0
- data/lib/Net/DNS/RR.rb +630 -0
- data/lib/Net/DNS/RR/A.rb +103 -0
- data/lib/Net/DNS/RR/AAAA.rb +147 -0
- data/lib/Net/DNS/RR/AFSDB.rb +114 -0
- data/lib/Net/DNS/RR/CERT.rb +191 -0
- data/lib/Net/DNS/RR/CNAME.rb +89 -0
- data/lib/Net/DNS/RR/DNAME.rb +84 -0
- data/lib/Net/DNS/RR/EID.rb +70 -0
- data/lib/Net/DNS/RR/HINFO.rb +108 -0
- data/lib/Net/DNS/RR/ISDN.rb +118 -0
- data/lib/Net/DNS/RR/LOC.rb +341 -0
- data/lib/Net/DNS/RR/MB.rb +92 -0
- data/lib/Net/DNS/RR/MG.rb +96 -0
- data/lib/Net/DNS/RR/MINFO.rb +109 -0
- data/lib/Net/DNS/RR/MR.rb +92 -0
- data/lib/Net/DNS/RR/MX.rb +124 -0
- data/lib/Net/DNS/RR/NAPTR.rb +182 -0
- data/lib/Net/DNS/RR/NIMLOC.rb +70 -0
- data/lib/Net/DNS/RR/NS.rb +100 -0
- data/lib/Net/DNS/RR/NSAP.rb +273 -0
- data/lib/Net/DNS/RR/NULL.rb +68 -0
- data/lib/Net/DNS/RR/OPT.rb +251 -0
- data/lib/Net/DNS/RR/PTR.rb +93 -0
- data/lib/Net/DNS/RR/PX.rb +131 -0
- data/lib/Net/DNS/RR/RP.rb +108 -0
- data/lib/Net/DNS/RR/RT.rb +115 -0
- data/lib/Net/DNS/RR/SOA.rb +195 -0
- data/lib/Net/DNS/RR/SPF.rb +46 -0
- data/lib/Net/DNS/RR/SRV.rb +153 -0
- data/lib/Net/DNS/RR/SSHFP.rb +190 -0
- data/lib/Net/DNS/RR/TKEY.rb +219 -0
- data/lib/Net/DNS/RR/TSIG.rb +358 -0
- data/lib/Net/DNS/RR/TXT.rb +162 -0
- data/lib/Net/DNS/RR/UNKNOWN.rb +76 -0
- data/lib/Net/DNS/RR/X25.rb +90 -0
- data/lib/Net/DNS/Resolver.rb +2090 -0
- data/lib/Net/DNS/Resolver/Recurse.rb +478 -0
- data/lib/Net/DNS/Update.rb +189 -0
- data/test/custom.txt +4 -0
- data/test/resolv.conf +4 -0
- data/test/tc_escapedchars.rb +498 -0
- data/test/tc_header.rb +91 -0
- data/test/tc_inet6.rb +169 -0
- data/test/tc_misc.rb +137 -0
- data/test/tc_online.rb +236 -0
- data/test/tc_packet.rb +174 -0
- data/test/tc_packet_unique_push.rb +126 -0
- data/test/tc_question.rb +49 -0
- data/test/tc_recurse.rb +69 -0
- data/test/tc_res_env.rb +59 -0
- data/test/tc_res_file.rb +55 -0
- data/test/tc_res_opt.rb +135 -0
- data/test/tc_resolver.rb +102 -0
- data/test/tc_rr-opt.rb +40 -0
- data/test/tc_rr-rrsort.rb +116 -0
- data/test/tc_rr-txt.rb +138 -0
- data/test/tc_rr-unknown.rb +95 -0
- data/test/tc_rr.rb +246 -0
- data/test/tc_tcp.rb +34 -0
- data/test/tc_tkey.rb +115 -0
- data/test/tc_update.rb +226 -0
- data/test/ts_netdns.rb +17 -0
- data/test/ts_offline.rb +32 -0
- data/test/ts_online.rb +33 -0
- metadata +119 -0
@@ -0,0 +1,341 @@
|
|
1
|
+
# The contents of this file are subject to the Mozilla
|
2
|
+
# Public Licence Version 1.1 (the "Licence"); you may
|
3
|
+
# not use this file except in compliance with the
|
4
|
+
# Licence. You may obtain a copy of the Licence at
|
5
|
+
# http://www.mozilla.org/MPL
|
6
|
+
# Software distributed under the Licence is distributed
|
7
|
+
# on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND,
|
8
|
+
# either express or implied. See the Licence of the
|
9
|
+
# specific language governing rights and limitations
|
10
|
+
# under the Licence.
|
11
|
+
# The Original Code is pNet::DNS.
|
12
|
+
# The Initial Developer of the Original Code is
|
13
|
+
# Nominet UK (www.nominet.org.uk). Portions created by
|
14
|
+
# Nominet UK are Copyright (c) Nominet UK 2006.
|
15
|
+
# All rights reserved.
|
16
|
+
module Net
|
17
|
+
module DNS
|
18
|
+
class RR
|
19
|
+
#= NAME
|
20
|
+
#
|
21
|
+
#Net::DNS::RR::LOC - DNS LOC resource record
|
22
|
+
#
|
23
|
+
#=head1 DESCRIPTION
|
24
|
+
#
|
25
|
+
#Class for DNS Location (LOC) resource records. See RFC 1876 for
|
26
|
+
#details.
|
27
|
+
#
|
28
|
+
#=head1 COPYRIGHT
|
29
|
+
#
|
30
|
+
#Copyright (c) 1997-2002 Michael Fuhr.
|
31
|
+
#
|
32
|
+
#Portions Copyright (c) 2002-2004 Chris Reinhardt.
|
33
|
+
#
|
34
|
+
#Ruby version Copyright (c) 2006 AlexD (Nominet UK)
|
35
|
+
#
|
36
|
+
#All rights reserved. This program is free software; you may redistribute
|
37
|
+
#it and/or modify it under the same terms as Perl itself.
|
38
|
+
#Some of the code and documentation is based on RFC 1876 and on code
|
39
|
+
#contributed by Christopher Davis.
|
40
|
+
#
|
41
|
+
#= SEE ALSO
|
42
|
+
#
|
43
|
+
#Net::DNS, Net::DNS::Resolver, Net::DNS::Packet,
|
44
|
+
#Net::DNS::Header, Net::DNS::Question, Net::DNS::RR,
|
45
|
+
#RFC 1876
|
46
|
+
class LOC < RR
|
47
|
+
#Returns the version number of the representation; programs should
|
48
|
+
#always check this. C<Net::DNS> currently supports only version 0.
|
49
|
+
#
|
50
|
+
# print "version = ", rr.version, "\n"
|
51
|
+
#
|
52
|
+
attr_accessor :version
|
53
|
+
#Returns the diameter of a sphere enclosing the described entity,
|
54
|
+
#in centimeters.
|
55
|
+
#
|
56
|
+
# print "size = ", rr.size, "\n"
|
57
|
+
#
|
58
|
+
attr_accessor :size
|
59
|
+
#Returns the horizontal precision of the data, in centimeters.
|
60
|
+
#
|
61
|
+
# print "horiz_pre = ", rr.horiz_pre, "\n"
|
62
|
+
#
|
63
|
+
attr_accessor :horiz_pre
|
64
|
+
#Returns the vertical precision of the data, in centimeters.
|
65
|
+
#
|
66
|
+
# print "vert_pre = ", rr.vert_pre, "\n"
|
67
|
+
#
|
68
|
+
attr_accessor :vert_pre
|
69
|
+
#Returns the latitude of the center of the sphere described by
|
70
|
+
#the size method, in thousandths of a second of arc. 2**31
|
71
|
+
#represents the equator; numbers above that are north latitude.
|
72
|
+
#
|
73
|
+
# print "latitude = ", rr.latitude, "\n"
|
74
|
+
#
|
75
|
+
attr_accessor :latitude
|
76
|
+
#Returns the longitude of the center of the sphere described by
|
77
|
+
#the size method, in thousandths of a second of arc. 2**31
|
78
|
+
#represents the prime meridian; numbers above that are east
|
79
|
+
#longitude.
|
80
|
+
#
|
81
|
+
# print "longitude = ", rr.longitude, "\n"
|
82
|
+
#
|
83
|
+
attr_accessor :longitude
|
84
|
+
#Returns the altitude of the center of the sphere described by
|
85
|
+
#the size method, in centimeters, from a base of 100,000m
|
86
|
+
#below the WGS 84 reference spheroid used by GPS.
|
87
|
+
#
|
88
|
+
# print "altitude = ", rr.altitude, "\n"
|
89
|
+
#
|
90
|
+
attr_accessor :altitude
|
91
|
+
# Powers of 10 from 0 to 9 (used to speed up calculations).
|
92
|
+
POWEROFTEN = [1, 10, 100, 1_000, 10_000, 100_000, 1_000_000, 10_000_000, 100_000_000, 1_000_000_000]
|
93
|
+
|
94
|
+
# Reference altitude in centimeters (see RFC 1876).
|
95
|
+
REFERENCE_ALT = 100_000 * 100;
|
96
|
+
|
97
|
+
# Reference lat/lon (see RFC 1876).
|
98
|
+
REFERENCE_LATLON = 2**31;
|
99
|
+
|
100
|
+
# Conversions to/from thousandths of a degree.
|
101
|
+
CONV_SEC = 1000;
|
102
|
+
CONV_MIN = 60 * CONV_SEC;
|
103
|
+
CONV_DEG = 60 * CONV_MIN;
|
104
|
+
|
105
|
+
# Defaults (from RFC 1876, Section 3).
|
106
|
+
DEFAULT_MIN = 0;
|
107
|
+
DEFAULT_SEC = 0;
|
108
|
+
DEFAULT_SIZE = 1;
|
109
|
+
DEFAULT_HORIZ_PRE = 10_000;
|
110
|
+
DEFAULT_VERT_PRE = 10;
|
111
|
+
|
112
|
+
def new_from_data(data, offset)
|
113
|
+
if (@rdlength > 0)
|
114
|
+
version = data.unpack("\@#{offset} C")[0]
|
115
|
+
offset+=1
|
116
|
+
|
117
|
+
@version = version;
|
118
|
+
|
119
|
+
if (version == 0)
|
120
|
+
size = data.unpack("\@#{offset} C")[0];
|
121
|
+
@size = precsize_ntoval(size);
|
122
|
+
offset+=1;
|
123
|
+
|
124
|
+
horiz_pre = data.unpack("\@#{offset} C")[0];
|
125
|
+
@horiz_pre = precsize_ntoval(horiz_pre);
|
126
|
+
offset+=1;
|
127
|
+
|
128
|
+
vert_pre = data.unpack("\@#{offset} C")[0];
|
129
|
+
@vert_pre = precsize_ntoval(vert_pre);
|
130
|
+
offset+=1
|
131
|
+
|
132
|
+
@latitude = data.unpack("\@#{offset} N")[0];
|
133
|
+
offset += Net::DNS::INT32SZ;
|
134
|
+
|
135
|
+
@longitude = data.unpack("\@#{offset} N")[0];
|
136
|
+
offset += Net::DNS::INT32SZ;
|
137
|
+
|
138
|
+
@altitude = data.unpack("\@#{offset} N")[0]
|
139
|
+
offset += Net::DNS::INT32SZ;
|
140
|
+
else
|
141
|
+
# What to do for unsupported versions?
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def new_from_hash(values)
|
147
|
+
if values.has_key?(:size)
|
148
|
+
@size = values[:size]
|
149
|
+
else
|
150
|
+
@size = DEFAULT_SIZE
|
151
|
+
end
|
152
|
+
if values.has_key?(:horiz_pre)
|
153
|
+
@horiz_pre = values[:horiz_pre]
|
154
|
+
else
|
155
|
+
@horiz_pre = DEFAULT_HORIZ_PRE * 100
|
156
|
+
end
|
157
|
+
if values.has_key?(:vert_pre)
|
158
|
+
@vert_pre = values[:vert_pre]
|
159
|
+
else
|
160
|
+
@vert_pre = DEFAULT_VERT_PRE * 100
|
161
|
+
end
|
162
|
+
if values.has_key?(:latitude)
|
163
|
+
@latitude = values[:latitude]
|
164
|
+
end
|
165
|
+
if values.has_key?(:longitude)
|
166
|
+
@longitude = values[:longitude]
|
167
|
+
end
|
168
|
+
if values.has_key?(:altitude)
|
169
|
+
@altitude = values[:altitude]
|
170
|
+
end
|
171
|
+
if values.has_key?(:version)
|
172
|
+
@version = values[:version]
|
173
|
+
# else
|
174
|
+
# @version = DEFAULT_VERSION
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def new_from_string(string)
|
179
|
+
if (string &&
|
180
|
+
string =~ /^ (\d+) \s+ # deg lat
|
181
|
+
((\d+) \s+)? # min lat
|
182
|
+
(([\d.]+) \s+)? # sec lat
|
183
|
+
(N|S) \s+ # hem lat
|
184
|
+
(\d+) \s+ # deg lon
|
185
|
+
((\d+) \s+)? # min lon
|
186
|
+
(([\d.]+) \s+)? # sec lon
|
187
|
+
(E|W) \s+ # hem lon
|
188
|
+
(-?[\d.]+) m? # altitude
|
189
|
+
(\s+ ([\d.]+) m?)? # size
|
190
|
+
(\s+ ([\d.]+) m?)? # horiz precision
|
191
|
+
(\s+ ([\d.]+) m?)? # vert precision
|
192
|
+
/ix) #
|
193
|
+
|
194
|
+
# What to do for other versions?
|
195
|
+
version = 0;
|
196
|
+
|
197
|
+
latdeg, latmin, latsec, lathem = $1.to_i, $3.to_i, $5.to_i, $6;
|
198
|
+
londeg, lonmin, lonsec, lonhem = $7.to_i, $9.to_i, $11.to_i, $12
|
199
|
+
alt, size, horiz_pre, vert_pre = $13.to_i, $15.to_i, $17.to_i, $19.to_i
|
200
|
+
|
201
|
+
latmin = DEFAULT_MIN unless latmin;
|
202
|
+
latsec = DEFAULT_SEC unless latsec;
|
203
|
+
lathem = lathem.upcase;
|
204
|
+
|
205
|
+
lonmin = DEFAULT_MIN unless lonmin;
|
206
|
+
lonsec = DEFAULT_SEC unless lonsec;
|
207
|
+
lonhem = lonhem.upcase
|
208
|
+
|
209
|
+
size = DEFAULT_SIZE unless size;
|
210
|
+
horiz_pre = DEFAULT_HORIZ_PRE unless horiz_pre;
|
211
|
+
vert_pre = DEFAULT_VERT_PRE unless vert_pre;
|
212
|
+
|
213
|
+
@version = version;
|
214
|
+
@size = size * 100;
|
215
|
+
@horiz_pre = horiz_pre * 100;
|
216
|
+
@vert_pre = vert_pre * 100;
|
217
|
+
@latitude = dms2latlon(latdeg, latmin, latsec, lathem);
|
218
|
+
@longitude = dms2latlon(londeg, lonmin, lonsec, lonhem);
|
219
|
+
@altitude = alt * 100 + REFERENCE_ALT;
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
def rdatastr
|
224
|
+
rdatastr=""
|
225
|
+
|
226
|
+
if (defined?@version)
|
227
|
+
if (@version == 0)
|
228
|
+
lat = @latitude;
|
229
|
+
lon = @longitude;
|
230
|
+
altitude = @altitude;
|
231
|
+
size = @size;
|
232
|
+
horiz_pre = @horiz_pre;
|
233
|
+
vert_pre = @vert_pre;
|
234
|
+
|
235
|
+
altitude = (altitude - REFERENCE_ALT) / 100;
|
236
|
+
size /= 100;
|
237
|
+
horiz_pre /= 100;
|
238
|
+
vert_pre /= 100;
|
239
|
+
|
240
|
+
rdatastr = latlon2dms(lat, "NS") + " " +
|
241
|
+
latlon2dms(lon, "EW") + " " +
|
242
|
+
sprintf("%.2fm", altitude) + " " +
|
243
|
+
sprintf("%.2fm", size) + " " +
|
244
|
+
sprintf("%.2fm", horiz_pre) + " " +
|
245
|
+
sprintf("%.2fm", vert_pre);
|
246
|
+
else
|
247
|
+
rdatastr = "; version " + @version + " not supported";
|
248
|
+
end
|
249
|
+
else
|
250
|
+
rdatastr = '';
|
251
|
+
end
|
252
|
+
|
253
|
+
return rdatastr;
|
254
|
+
end
|
255
|
+
|
256
|
+
def rr_rdata(*args)
|
257
|
+
rdata = "";
|
258
|
+
|
259
|
+
if (defined?@version)
|
260
|
+
rdata += [@version].pack("C");
|
261
|
+
if (@version == 0)
|
262
|
+
rdata += [precsize_valton(@size), precsize_valton(@horiz_pre), precsize_valton(@vert_pre)].pack("C3");
|
263
|
+
rdata += [@latitude, @longitude, @altitude].pack("N3");
|
264
|
+
else
|
265
|
+
# What to do for other versions?
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
return rdata;
|
270
|
+
end
|
271
|
+
|
272
|
+
def precsize_ntoval(prec)
|
273
|
+
mantissa = ((prec >> 4) & 0x0f) % 10;
|
274
|
+
exponent = (prec & 0x0f) % 10;
|
275
|
+
return mantissa * POWEROFTEN[exponent];
|
276
|
+
end
|
277
|
+
|
278
|
+
def precsize_valton(val)
|
279
|
+
exponent = 0;
|
280
|
+
while (val >= 10)
|
281
|
+
val /= 10;
|
282
|
+
exponent+=1
|
283
|
+
end
|
284
|
+
return (val.round << 4) | (exponent & 0x0f);
|
285
|
+
end
|
286
|
+
|
287
|
+
def latlon2dms(rawmsec, hems)
|
288
|
+
# Tried to use modulus here, but Perl dumped core if
|
289
|
+
# the value was >= 2**31.
|
290
|
+
|
291
|
+
abs = (rawmsec - REFERENCE_LATLON).abs;
|
292
|
+
deg = (abs / CONV_DEG).round;
|
293
|
+
abs -= deg * CONV_DEG;
|
294
|
+
min = (abs / CONV_MIN).round;
|
295
|
+
abs -= min * CONV_MIN;
|
296
|
+
sec = (abs / CONV_SEC).round; # $conv_sec
|
297
|
+
abs -= sec * CONV_SEC;
|
298
|
+
msec = abs;
|
299
|
+
|
300
|
+
hem = hems[(rawmsec >= REFERENCE_LATLON ? 0 : 1), 1]
|
301
|
+
|
302
|
+
return sprintf("%d %02d %02d.%03d %s", deg, min, sec, msec, hem);
|
303
|
+
end
|
304
|
+
|
305
|
+
def dms2latlon(deg, min, sec, hem)
|
306
|
+
retval=0
|
307
|
+
|
308
|
+
retval = (deg * CONV_DEG) + (min * CONV_MIN) + (sec * CONV_SEC);
|
309
|
+
retval = -retval if ((hem != nil) && ((hem == "S") || (hem == "W")));
|
310
|
+
retval += REFERENCE_LATLON;
|
311
|
+
return retval;
|
312
|
+
end
|
313
|
+
|
314
|
+
#Returns the latitude and longitude as floating-point degrees.
|
315
|
+
#Positive numbers represent north latitude or east longitude;
|
316
|
+
#negative numbers represent south latitude or west longitude.
|
317
|
+
#
|
318
|
+
# lat, lon = rr.latlon
|
319
|
+
# system("xearth", "-pos", "fixed #{lat} #{lon}")
|
320
|
+
#
|
321
|
+
def latlon
|
322
|
+
retlat, retlon = nil
|
323
|
+
|
324
|
+
if (@version == 0)
|
325
|
+
retlat = latlon2deg(@latitude);
|
326
|
+
retlon = latlon2deg(@longitude);
|
327
|
+
end
|
328
|
+
|
329
|
+
return retlat, retlon
|
330
|
+
end
|
331
|
+
|
332
|
+
def latlon2deg(rawmsec)
|
333
|
+
deg=0;
|
334
|
+
|
335
|
+
deg = (rawmsec - reference_latlon) / CONV_DEG;
|
336
|
+
return deg;
|
337
|
+
end
|
338
|
+
end
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# The contents of this file are subject to the Mozilla
|
2
|
+
# Public Licence Version 1.1 (the "Licence"); you may
|
3
|
+
# not use this file except in compliance with the
|
4
|
+
# Licence. You may obtain a copy of the Licence at
|
5
|
+
# http://www.mozilla.org/MPL
|
6
|
+
# Software distributed under the Licence is distributed
|
7
|
+
# on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND,
|
8
|
+
# either express or implied. See the Licence of the
|
9
|
+
# specific language governing rights and limitations
|
10
|
+
# under the Licence.
|
11
|
+
# The Original Code is pNet::DNS.
|
12
|
+
# The Initial Developer of the Original Code is
|
13
|
+
# Nominet UK (www.nominet.org.uk). Portions created by
|
14
|
+
# Nominet UK are Copyright (c) Nominet UK 2006.
|
15
|
+
# All rights reserved.
|
16
|
+
module Net
|
17
|
+
module DNS
|
18
|
+
class RR
|
19
|
+
#= NAME
|
20
|
+
#
|
21
|
+
#Net::DNS::RR::MB - DNS MB resource record
|
22
|
+
#
|
23
|
+
#= DESCRIPTION
|
24
|
+
#
|
25
|
+
#Class for DNS Mailbox (MB) resource records.
|
26
|
+
#
|
27
|
+
#= COPYRIGHT
|
28
|
+
#
|
29
|
+
#Copyright (c) 1997-2002 Michael Fuhr.
|
30
|
+
#
|
31
|
+
#Portions Copyright (c) 2002-2004 Chris Reinhardt.
|
32
|
+
#
|
33
|
+
#Ruby version Copyright (c) 2006 AlexD (Nominet UK)
|
34
|
+
#
|
35
|
+
#All rights reserved. This program is free software; you may redistribute
|
36
|
+
#it and/or modify it under the same terms as Perl itself.
|
37
|
+
#=head1 SEE ALSO
|
38
|
+
#
|
39
|
+
#Net::DNS, Net::DNS::Resolver, Net::DNS::Packet,
|
40
|
+
#Net::DNS::Header, Net::DNS::Question, Net::DNS::RR,
|
41
|
+
#RFC 1035 Section 3.3.3
|
42
|
+
class MB < RR
|
43
|
+
#Returns the domain name of the host which has the specified mailbox.
|
44
|
+
#
|
45
|
+
#
|
46
|
+
# print "madname = ", rr.madname, "\n"
|
47
|
+
#
|
48
|
+
attr_accessor :madname
|
49
|
+
def new_from_data(data, offset)
|
50
|
+
if (@rdlength > 0)
|
51
|
+
@madname = Net::DNS::Packet::dn_expand(data, offset)[0];
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def new_from_string(s)
|
56
|
+
if (s)
|
57
|
+
string = s.sub(/\.+$/,"");
|
58
|
+
@madname = string;
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def new_from_hash(values)
|
63
|
+
if values.has_key?(:madname)
|
64
|
+
@madname = values[:madname]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def rdatastr
|
69
|
+
return @madname ? "#{@madname}." : '';
|
70
|
+
end
|
71
|
+
|
72
|
+
def rr_rdata(packet, offset)
|
73
|
+
rdata = "";
|
74
|
+
|
75
|
+
if (defined?@madname)
|
76
|
+
rdata += packet.dn_comp(@madname, offset);
|
77
|
+
end
|
78
|
+
|
79
|
+
return rdata;
|
80
|
+
end
|
81
|
+
|
82
|
+
def _canonicalRdata
|
83
|
+
rdata = "";
|
84
|
+
if (defined?@madname)
|
85
|
+
rdata += _name2wire(@madname);
|
86
|
+
end
|
87
|
+
return rdata;
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# The contents of this file are subject to the Mozilla
|
2
|
+
# Public Licence Version 1.1 (the "Licence"); you may
|
3
|
+
# not use this file except in compliance with the
|
4
|
+
# Licence. You may obtain a copy of the Licence at
|
5
|
+
# http://www.mozilla.org/MPL
|
6
|
+
# Software distributed under the Licence is distributed
|
7
|
+
# on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND,
|
8
|
+
# either express or implied. See the Licence of the
|
9
|
+
# specific language governing rights and limitations
|
10
|
+
# under the Licence.
|
11
|
+
# The Original Code is pNet::DNS.
|
12
|
+
# The Initial Developer of the Original Code is
|
13
|
+
# Nominet UK (www.nominet.org.uk). Portions created by
|
14
|
+
# Nominet UK are Copyright (c) Nominet UK 2006.
|
15
|
+
# All rights reserved.
|
16
|
+
module Net
|
17
|
+
module DNS
|
18
|
+
class RR
|
19
|
+
#= NAME
|
20
|
+
#
|
21
|
+
#Net::DNS::RR::MG - DNS MG resource record
|
22
|
+
#
|
23
|
+
#= DESCRIPTION
|
24
|
+
#
|
25
|
+
#Class for DNS Mail Group (MG) resource records.
|
26
|
+
#
|
27
|
+
#= COPYRIGHT
|
28
|
+
#
|
29
|
+
#Copyright (c) 1997-2002 Michael Fuhr.
|
30
|
+
#
|
31
|
+
#Portions Copyright (c) 2002-2004 Chris Reinhardt.
|
32
|
+
#
|
33
|
+
#Ruby version Copyright (c) 2006 AlexD (Nominet UK)
|
34
|
+
#
|
35
|
+
#All rights reserved. This program is free software; you may redistribute
|
36
|
+
#it and/or modify it under the same terms as Perl itself.
|
37
|
+
#=head1 SEE ALSO
|
38
|
+
#
|
39
|
+
#Net::DNS, Net::DNS::Resolver, Net::DNS::Packet,
|
40
|
+
#Net::DNS::Header, Net::DNS::Question, Net::DNS::RR,
|
41
|
+
#RFC 1035 Section 3.3.6
|
42
|
+
class MG < RR
|
43
|
+
#Returns the RR's mailbox field.
|
44
|
+
#
|
45
|
+
# print "mgmname = ", rr.mgmname, "\n"
|
46
|
+
#
|
47
|
+
attr_accessor :mgmname
|
48
|
+
def new_from_data(data, offset)
|
49
|
+
if (@rdlength > 0)
|
50
|
+
@mgmname = Net::DNS::Packet::dn_expand(data, offset)[0];
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def new_from_string(s)
|
55
|
+
if (s)
|
56
|
+
string = s.sub(/\.+$/,"");
|
57
|
+
@mgmname = string;
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def new_from_hash(values)
|
62
|
+
if values.has_key?(:mgmname)
|
63
|
+
@mgmname = values[:mgmname]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def rdatastr
|
68
|
+
if defined?@mgmname
|
69
|
+
return "#{@mgmname}."
|
70
|
+
else
|
71
|
+
return ''
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def rr_rdata(packet, offset)
|
76
|
+
rdata = "";
|
77
|
+
|
78
|
+
if (defined?@mgmname)
|
79
|
+
rdata += packet.dn_comp(@mgmname, offset);
|
80
|
+
end
|
81
|
+
|
82
|
+
return rdata;
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
def _canonicalRdata
|
87
|
+
rdata = "";
|
88
|
+
if (defined?@mgmname)
|
89
|
+
rdata += _name2wire(@mgmname);
|
90
|
+
end
|
91
|
+
return rdata;
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|