dnsruby 1.39 → 1.40
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/Dnsruby/Recursor.rb +1 -1
- data/lib/Dnsruby/code_mapper.rb +5 -14
- data/lib/Dnsruby/name.rb +7 -5
- data/lib/Dnsruby/resource/AFSDB.rb +1 -1
- data/lib/Dnsruby/resource/CERT.rb +21 -8
- data/lib/Dnsruby/resource/DHCID.rb +55 -0
- data/lib/Dnsruby/resource/HINFO.rb +5 -1
- data/lib/Dnsruby/resource/HIP.rb +138 -0
- data/lib/Dnsruby/resource/IN.rb +2 -2
- data/lib/Dnsruby/resource/IPSECKEY.rb +143 -0
- data/lib/Dnsruby/resource/ISDN.rb +9 -1
- data/lib/Dnsruby/resource/KX.rb +66 -0
- data/lib/Dnsruby/resource/LOC.rb +10 -4
- data/lib/Dnsruby/resource/X25.rb +3 -1
- data/lib/Dnsruby/resource/generic.rb +5 -1
- data/lib/Dnsruby/resource/resource.rb +8 -2
- data/lib/Dnsruby/single_verifier.rb +3 -0
- data/lib/Dnsruby/zone_reader.rb +381 -0
- data/lib/dnsruby.rb +3 -0
- data/test/tc_hip.rb +70 -0
- data/test/tc_ipseckey.rb +70 -0
- data/test/tc_rr.rb +37 -1
- data/test/tc_verifier.rb +0 -46
- data/test/ts_offline.rb +2 -1
- metadata +10 -3
data/lib/Dnsruby/Recursor.rb
CHANGED
@@ -384,7 +384,7 @@ module Dnsruby
|
|
384
384
|
|
385
385
|
# Make sure that known_authorities still contains some authorities!
|
386
386
|
# If not, remove the zone from zones_cache, and start again
|
387
|
-
if (known_authorities.values.length > 0)
|
387
|
+
if (known_authorities && known_authorities.values.length > 0)
|
388
388
|
done = true
|
389
389
|
else
|
390
390
|
@@mutex.synchronize{
|
data/lib/Dnsruby/code_mapper.rb
CHANGED
@@ -103,7 +103,7 @@ module Dnsruby
|
|
103
103
|
code = array.stringsdown[arg.downcase]
|
104
104
|
if (code != nil)
|
105
105
|
@code = code
|
106
|
-
@string = array.
|
106
|
+
@string = array.values[@code]
|
107
107
|
else
|
108
108
|
unknown_string(arg)
|
109
109
|
end
|
@@ -125,7 +125,7 @@ module Dnsruby
|
|
125
125
|
def set_string(arg)
|
126
126
|
array = @@arrays[self.class]
|
127
127
|
@code = array.stringsdown[arg.downcase]
|
128
|
-
@string = array.
|
128
|
+
@string = array.values[@code]
|
129
129
|
end
|
130
130
|
|
131
131
|
def set_code(arg)
|
@@ -162,18 +162,9 @@ module Dnsruby
|
|
162
162
|
end
|
163
163
|
|
164
164
|
def ==(other)
|
165
|
-
if
|
166
|
-
|
167
|
-
|
168
|
-
end
|
169
|
-
elsif String === other
|
170
|
-
if other == @string
|
171
|
-
return true
|
172
|
-
end
|
173
|
-
elsif CodeMapper === other
|
174
|
-
if other.string == @string && other.code == @code
|
175
|
-
return true
|
176
|
-
end
|
165
|
+
return true if [@code, @string].include?other
|
166
|
+
if (CodeMapper === other)
|
167
|
+
return true if ((other.code == @code) || (other.string == @string))
|
177
168
|
end
|
178
169
|
return false
|
179
170
|
end
|
data/lib/Dnsruby/name.rb
CHANGED
@@ -72,7 +72,7 @@ module Dnsruby
|
|
72
72
|
return labels
|
73
73
|
end
|
74
74
|
|
75
|
-
|
75
|
+
attr_accessor :labels
|
76
76
|
|
77
77
|
#This method should only be called internally.
|
78
78
|
#Use Name::create to create a new Name
|
@@ -172,7 +172,7 @@ module Dnsruby
|
|
172
172
|
end
|
173
173
|
|
174
174
|
def ==(other) # :nodoc:
|
175
|
-
return false
|
175
|
+
return false if other.class != Name
|
176
176
|
return @labels == other.labels && @absolute == other.absolute?
|
177
177
|
end
|
178
178
|
alias eql? == # :nodoc:
|
@@ -267,9 +267,10 @@ module Dnsruby
|
|
267
267
|
# I start looking forward and do the magic.
|
268
268
|
|
269
269
|
i=0;
|
270
|
-
|
270
|
+
|
271
|
+
unpacked = wire.unpack("C*")
|
271
272
|
while (i < length )
|
272
|
-
c=
|
273
|
+
c = unpacked[i]
|
273
274
|
if ( c < 33 || c > 126 )
|
274
275
|
presentation=presentation + sprintf("\\%03u" ,c)
|
275
276
|
elsif ( c.chr == "\"" )
|
@@ -378,6 +379,7 @@ module Dnsruby
|
|
378
379
|
end
|
379
380
|
@downcase = string.downcase
|
380
381
|
@string = string
|
382
|
+
@string_length = string.length
|
381
383
|
end
|
382
384
|
attr_reader :string, :downcase
|
383
385
|
|
@@ -386,7 +388,7 @@ module Dnsruby
|
|
386
388
|
end
|
387
389
|
|
388
390
|
def length
|
389
|
-
return @
|
391
|
+
return @string_length
|
390
392
|
end
|
391
393
|
|
392
394
|
def inspect
|
@@ -63,25 +63,38 @@ module Dnsruby
|
|
63
63
|
def from_string(input) #:nodoc: all
|
64
64
|
if (input != "")
|
65
65
|
names = input.split(" ")
|
66
|
-
|
66
|
+
begin
|
67
|
+
@certtype = CertificateTypes::new(names[0])
|
68
|
+
rescue ArgumentError
|
69
|
+
@certtype = CertificateTypes::new(names[0].to_i)
|
70
|
+
end
|
67
71
|
@keytag = names[1].to_i
|
68
|
-
|
69
|
-
|
72
|
+
begin
|
73
|
+
@alg = Dnsruby::Algorithms.new(names[2])
|
74
|
+
rescue ArgumentError
|
75
|
+
@alg = Dnsruby::Algorithms.new(names[2].to_i)
|
76
|
+
end
|
77
|
+
buf = names[3]
|
78
|
+
|
79
|
+
|
80
|
+
buf.gsub!(/\n/, "")
|
81
|
+
buf.gsub!(/ /, "")
|
82
|
+
@cert = buf.unpack("m*").first
|
70
83
|
end
|
71
84
|
end
|
72
85
|
|
73
86
|
def rdata_to_string #:nodoc: all
|
74
|
-
return "#{@certtype.string} #{@keytag} #{@alg.string} #{@cert}"
|
87
|
+
return "#{@certtype.string} #{@keytag} #{@alg.string} #{[@cert.to_s].pack("m*").gsub("\n", "")}"
|
75
88
|
end
|
76
89
|
|
77
90
|
def encode_rdata(msg, canonical=false) #:nodoc: all
|
78
|
-
msg.put_pack('
|
79
|
-
msg.
|
91
|
+
msg.put_pack('nnc', @certtype.code, @keytag, @alg.code)
|
92
|
+
msg.put_bytes(@cert)
|
80
93
|
end
|
81
94
|
|
82
95
|
def self.decode_rdata(msg) #:nodoc: all
|
83
|
-
certtype, keytag, alg = msg.get_unpack('
|
84
|
-
cert = msg.
|
96
|
+
certtype, keytag, alg = msg.get_unpack('nnc')
|
97
|
+
cert = msg.get_bytes
|
85
98
|
return self.new([certtype, keytag, alg, cert])
|
86
99
|
end
|
87
100
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#--
|
2
|
+
#Copyright 2007 Nominet UK
|
3
|
+
#
|
4
|
+
#Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
#you may not use this file except in compliance with the License.
|
6
|
+
#You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
#Unless required by applicable law or agreed to in writing, software
|
11
|
+
#distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
#See the License for the specific language governing permissions and
|
14
|
+
#limitations under the License.
|
15
|
+
#++
|
16
|
+
module Dnsruby
|
17
|
+
class RR
|
18
|
+
#Class for DNS DHCP ID (DHCID) resource records.
|
19
|
+
#RFC 4701
|
20
|
+
class DHCID < RR
|
21
|
+
ClassValue = nil #:nodoc: all
|
22
|
+
TypeValue= Types::DHCID #:nodoc: all
|
23
|
+
|
24
|
+
#The opaque rdata for DHCID
|
25
|
+
attr_accessor :dhcid_data
|
26
|
+
|
27
|
+
def from_hash(hash) #:nodoc: all
|
28
|
+
@dhcid_data = hash[:dhcid_data]
|
29
|
+
end
|
30
|
+
|
31
|
+
def from_data(data) #:nodoc: all
|
32
|
+
@dhcid_data, = data
|
33
|
+
end
|
34
|
+
|
35
|
+
def from_string(input) #:nodoc: all
|
36
|
+
buf = input.gsub(/\n/, "")
|
37
|
+
buf.gsub!(/ /, "")
|
38
|
+
@dhcid_data = buf.unpack("m*").first
|
39
|
+
end
|
40
|
+
|
41
|
+
def rdata_to_string #:nodoc: all
|
42
|
+
return "#{[@dhcid_data.to_s].pack("m*").gsub("\n", "")}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
46
|
+
msg.put_bytes(@dhcid_data)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.decode_rdata(msg) #:nodoc: all
|
50
|
+
dhcid_data, = msg.get_bytes()
|
51
|
+
return self.new([dhcid_data])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -30,7 +30,11 @@ module Dnsruby
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def from_string(input) #:nodoc: all
|
33
|
-
|
33
|
+
cpu, os = input.split(" ")
|
34
|
+
cpu.sub!(/^\"/, "")
|
35
|
+
@cpu = cpu.sub(/\"$/, "")
|
36
|
+
os.sub!(/^\"/, "")
|
37
|
+
@os = os.sub(/\"$/, "")
|
34
38
|
end
|
35
39
|
|
36
40
|
def rdata_to_string #:nodoc: all
|
@@ -0,0 +1,138 @@
|
|
1
|
+
|
2
|
+
#--
|
3
|
+
#Copyright 2009 Nominet UK
|
4
|
+
#
|
5
|
+
#Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
#you may not use this file except in compliance with the License.
|
7
|
+
#You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
#Unless required by applicable law or agreed to in writing, software
|
12
|
+
#distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
#See the License for the specific language governing permissions and
|
15
|
+
#limitations under the License.
|
16
|
+
#++
|
17
|
+
module Dnsruby
|
18
|
+
class RR
|
19
|
+
class HIP < RR
|
20
|
+
|
21
|
+
ClassValue = nil #:nodoc: all
|
22
|
+
TypeValue = Types::HIP #:nodoc: all
|
23
|
+
|
24
|
+
#An 8-bit length for the HIT field
|
25
|
+
attr_accessor :hit_length
|
26
|
+
#The PK algorithm used :
|
27
|
+
# 0 - no key present
|
28
|
+
# 1 - DSA key present
|
29
|
+
# 2 - RSA key present
|
30
|
+
attr_accessor :pk_algorithm
|
31
|
+
#An 8-bit length for the Public Key field
|
32
|
+
attr_accessor :pk_length
|
33
|
+
|
34
|
+
#An array of Rendezvous Servers
|
35
|
+
attr_accessor :rsvs
|
36
|
+
|
37
|
+
def from_data(data) #:nodoc: all
|
38
|
+
@rsvs=[]
|
39
|
+
@hit_length = data[0]
|
40
|
+
@pk_algorithm = data[1]
|
41
|
+
@pk_length = data[2]
|
42
|
+
@hit = data[3]
|
43
|
+
@public_key = data[4]
|
44
|
+
@rsvs = data[5]
|
45
|
+
end
|
46
|
+
|
47
|
+
def from_hash(hash)
|
48
|
+
@rsvs=[]
|
49
|
+
@hit_length = hash[:hit_length]
|
50
|
+
@pk_algorithm = hash[:pk_algorithm]
|
51
|
+
@pk_length = hash[:pk_length]
|
52
|
+
@hit = hash[:hit]
|
53
|
+
@public_key = hash[:public_key]
|
54
|
+
if (hash[:rsvs])
|
55
|
+
hash[:rsvs].each {|rsv|
|
56
|
+
@rsvs.push(Name.create(rsv))
|
57
|
+
}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
#HIT field - stored in binary : client methods should handle base16(hex) encoding
|
62
|
+
def hit_string
|
63
|
+
# Return hex value
|
64
|
+
[@hit.to_s].pack("H*").gsub("\n", "")
|
65
|
+
end
|
66
|
+
def hit_from_string(hit_text)
|
67
|
+
# Decode the hex value
|
68
|
+
hit_text.gsub!(/\n/, "")
|
69
|
+
hit_text.gsub!(/ /, "")
|
70
|
+
return hit_text.unpack("H*")[0]
|
71
|
+
end
|
72
|
+
|
73
|
+
#Public Key field - presentation format is base64 - public_key methods reused from IPSECKEY
|
74
|
+
def public_key_string
|
75
|
+
[@public_key.to_s].pack("m*").gsub("\n", "")
|
76
|
+
end
|
77
|
+
|
78
|
+
def public_key_from_string(key_text)
|
79
|
+
key_text.gsub!(/\n/, "")
|
80
|
+
key_text.gsub!(/ /, "")
|
81
|
+
return key_text.unpack("m*")[0]
|
82
|
+
end
|
83
|
+
|
84
|
+
def from_string(input)
|
85
|
+
@rsvs=[]
|
86
|
+
if (input.length > 0)
|
87
|
+
split = input.split(" ")
|
88
|
+
|
89
|
+
@pk_algorithm = split[0].to_i
|
90
|
+
@hit = hit_from_string(split[1])
|
91
|
+
@hit_length = @hit.length
|
92
|
+
@public_key = public_key_from_string(split[2])
|
93
|
+
@pk_length = @public_key.length
|
94
|
+
|
95
|
+
# Now load in any RSVs there may be
|
96
|
+
count = 3
|
97
|
+
while (split[count])
|
98
|
+
@rsvs.push(Name.create(split[count]))
|
99
|
+
count += 1
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def rdata_to_string #:nodoc: all
|
106
|
+
ret = "#{@pk_algorithm} #{hit_string} #{public_key_string}"
|
107
|
+
@rsvs.each {|rsv|
|
108
|
+
ret += " #{rsv}"
|
109
|
+
}
|
110
|
+
return ret
|
111
|
+
end
|
112
|
+
|
113
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all\
|
114
|
+
msg.put_pack('ccC', @hit_length, @pk_algorithm, @pk_length)
|
115
|
+
msg.put_bytes(@hit)
|
116
|
+
msg.put_bytes(@public_key)
|
117
|
+
@rsvs.each {|rsv|
|
118
|
+
# RSVs MUST NOT be compressed
|
119
|
+
msg.put_name(rsv, true)
|
120
|
+
}
|
121
|
+
end
|
122
|
+
|
123
|
+
def self.decode_rdata(msg) #:nodoc: all
|
124
|
+
hit_length, pk_algorithm, pk_length = msg.get_unpack('ccC')
|
125
|
+
hit = msg.get_bytes(hit_length)
|
126
|
+
public_key = msg.get_bytes(pk_length)
|
127
|
+
rsvs = []
|
128
|
+
# Load in the RSV names, if there are any
|
129
|
+
while (msg.has_remaining)
|
130
|
+
name = msg.get_name
|
131
|
+
rsvs.push(name)
|
132
|
+
end
|
133
|
+
return self.new(
|
134
|
+
[hit_length, pk_algorithm, pk_length, hit, public_key, rsvs])
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
data/lib/Dnsruby/resource/IN.rb
CHANGED
@@ -17,9 +17,9 @@ module Dnsruby
|
|
17
17
|
class RR
|
18
18
|
ClassInsensitiveTypes = [
|
19
19
|
NS, CNAME, DNAME, DNSKEY, SOA, PTR, HINFO, MINFO, MX, TXT,
|
20
|
-
ISDN, MB, MG, MR, NAPTR, NSAP, OPT, RP, RT, X25,
|
20
|
+
ISDN, MB, MG, MR, NAPTR, NSAP, OPT, RP, RT, X25, KX,
|
21
21
|
SPF, CERT, LOC, TSIG, TKEY, ANY, RRSIG, NSEC, DS, NSEC3,
|
22
|
-
NSEC3PARAM, DLV, SSHFP
|
22
|
+
NSEC3PARAM, DLV, SSHFP, IPSECKEY, HIP, DHCID
|
23
23
|
] #:nodoc: all
|
24
24
|
|
25
25
|
# module IN contains ARPA Internet specific RRs
|
@@ -0,0 +1,143 @@
|
|
1
|
+
#--
|
2
|
+
#Copyright 2009 Nominet UK
|
3
|
+
#
|
4
|
+
#Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
#you may not use this file except in compliance with the License.
|
6
|
+
#You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
#Unless required by applicable law or agreed to in writing, software
|
11
|
+
#distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
#See the License for the specific language governing permissions and
|
14
|
+
#limitations under the License.
|
15
|
+
#++
|
16
|
+
module Dnsruby
|
17
|
+
class RR
|
18
|
+
class IPSECKEY < RR
|
19
|
+
|
20
|
+
ClassValue = nil #:nodoc: all
|
21
|
+
TypeValue = Types::IPSECKEY #:nodoc: all
|
22
|
+
|
23
|
+
#An 8-bit precedence for this field. Lower values are preferred.
|
24
|
+
attr_accessor :precedence
|
25
|
+
#Specifies the type of gateway :
|
26
|
+
# 0 - no gateway present
|
27
|
+
# 1 - 4 byte IPv4 address present
|
28
|
+
# 2 - 16 byte IPv6 address present
|
29
|
+
# 3 - wire-encoded domain name present
|
30
|
+
attr_accessor :gateway_type
|
31
|
+
#The algorithm used by this key :
|
32
|
+
# 0 - no key present
|
33
|
+
# 1 - DSA key present
|
34
|
+
# 2 - RSA key present
|
35
|
+
attr_accessor :algorithm
|
36
|
+
#The gateway. May either be a 32-bit network order IPv4 address, or a
|
37
|
+
#128-bit IPv6 address, or a domain name, or may not be present.
|
38
|
+
attr_accessor :gateway
|
39
|
+
|
40
|
+
def from_data(data) #:nodoc: all
|
41
|
+
@precedence = data[0]
|
42
|
+
@gateway_type = data[1]
|
43
|
+
@algorithm = data[2]
|
44
|
+
@public_key = nil
|
45
|
+
@gateway = load_gateway_from_string(@gateway_type, data[3])
|
46
|
+
if (@gateway)
|
47
|
+
@public_key = data[4]
|
48
|
+
else
|
49
|
+
@public_key = data[3]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def from_hash(hash)
|
54
|
+
@precedence = hash[:precedence]
|
55
|
+
@gateway_type = hash[:gateway_type]
|
56
|
+
@algorithm = hash[:algorithm]
|
57
|
+
@gateway = load_gateway_from_string(@gateway_type, hash[:gateway])
|
58
|
+
@public_key = hash[:public_key]
|
59
|
+
end
|
60
|
+
|
61
|
+
def load_gateway_from_string(gateway_type, s)
|
62
|
+
gateway = nil
|
63
|
+
if (gateway_type == 0)
|
64
|
+
gateway = nil
|
65
|
+
elsif (gateway_type == 1)
|
66
|
+
# Load IPv4 gateway
|
67
|
+
gateway = IPv4.create(s)
|
68
|
+
elsif (gateway_type == 2)
|
69
|
+
# Load IPv6 gateway
|
70
|
+
gateway = IPv6.create(s)
|
71
|
+
else
|
72
|
+
# Load gateway domain name
|
73
|
+
gateway = Name.create(s)
|
74
|
+
end
|
75
|
+
return gateway
|
76
|
+
end
|
77
|
+
|
78
|
+
def public_key_string
|
79
|
+
[@public_key.to_s].pack("m*").gsub("\n", "")
|
80
|
+
end
|
81
|
+
|
82
|
+
def public_key_from_string(key_text)
|
83
|
+
key_text.gsub!(/\n/, "")
|
84
|
+
key_text.gsub!(/ /, "")
|
85
|
+
return key_text.unpack("m*")[0]
|
86
|
+
end
|
87
|
+
|
88
|
+
def from_string(input)
|
89
|
+
if (input.length > 0)
|
90
|
+
split = input.split(" ")
|
91
|
+
|
92
|
+
@precedence = split[0].to_i
|
93
|
+
@gateway_type = split[1].to_i
|
94
|
+
@algorithm = split[2].to_i
|
95
|
+
|
96
|
+
@gateway = load_gateway_from_string(@gateway_type, split[3])
|
97
|
+
|
98
|
+
@public_key = public_key_from_string(split[4])
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def rdata_to_string #:nodoc: all
|
103
|
+
ret = "#{@precedence} #{@gateway_type} #{@algorithm} "
|
104
|
+
if (@gateway_type > 0)
|
105
|
+
ret += "#{@gateway} "
|
106
|
+
end
|
107
|
+
ret += "#{public_key_string()}"
|
108
|
+
return ret
|
109
|
+
end
|
110
|
+
|
111
|
+
def encode_rdata(msg, canonical=false) #:nodoc: all
|
112
|
+
msg.put_pack('ccc', @precedence, @gateway_type, @algorithm)
|
113
|
+
if ([1,2].include?@gateway_type)
|
114
|
+
msg.put_bytes(@gateway.address)
|
115
|
+
end
|
116
|
+
if (@gateway_type == 3)
|
117
|
+
msg.put_name(@gateway, true) # gateway MUST NOT be compressed
|
118
|
+
end
|
119
|
+
msg.put_bytes(@public_key)
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.decode_rdata(msg) #:nodoc: all
|
123
|
+
precedence, gateway_type, algorithm = msg.get_unpack('ccc')
|
124
|
+
gateway = nil
|
125
|
+
if (gateway_type == 1)
|
126
|
+
gateway = IPv4.new(msg.get_bytes(4))
|
127
|
+
elsif (gateway_type == 2)
|
128
|
+
gateway = IPv6.new(msg.get_bytes(16))
|
129
|
+
elsif (gateway_type == 3)
|
130
|
+
gateway = msg.get_name
|
131
|
+
end
|
132
|
+
public_key = msg.get_bytes
|
133
|
+
if (gateway_type == 0)
|
134
|
+
return self.new(
|
135
|
+
[precedence, gateway_type, algorithm, public_key])
|
136
|
+
else
|
137
|
+
return self.new(
|
138
|
+
[precedence, gateway_type, algorithm, gateway, public_key])
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|