lib-dhcp 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 59b61676615cea1b59b8f92f5b1fa9ecc53d8895
4
- data.tar.gz: dea9c87dc3501e3ed25e99868a3d26d15c3a91ed
2
+ SHA256:
3
+ metadata.gz: 903661e700f93534c6a5901ec965da48261e5e97d399f812bff7aa8b9d990b9d
4
+ data.tar.gz: d2f9fb68a1171aa5812bfe5b7da0e9c4316ced431f24b33271d0704d61fda7d4
5
5
  SHA512:
6
- metadata.gz: 40c382a59b8d03641246a822ea953ff7176e89df237d6d2477ea5cf138ca7549eed1813d12112e25ac6dfd1b0af658816b3f8d2c07aaa951fd1eb74bfb4fe5b6
7
- data.tar.gz: f2c9e5b4692d13c53bd8a313a193d402cb0966b21dcc682d3e210c044beedcbe9819241335ae1fd3a74343f3c350d3357df7628bd0a3a566a4ec95f6b9566ff3
6
+ metadata.gz: 88a40896ce795cd16bea2836b2f9e3f8db1fd332b86c2a21ac34e72c0f2380cca86a112d6d369f9fd1b6e7ffdef50e0f64ce288289444a9691f39dda82e67582
7
+ data.tar.gz: ed34b5fdfd7f36dd3286765fcf10f89facedb02e5531fba4d15f26efffc1fbf4ed96a01d504c341a63f34656529f03ba713c855ca7bbdd40fb998a19e2dc3784
@@ -19,34 +19,7 @@ module Lib
19
19
  oid = self.class.name.split('::').last.sub(/Option/, '').to_i
20
20
  sub_options = []
21
21
  sub_option.each do |sub|
22
- if sub.is_a? Lib::DHCP::Option122::SubOption
23
- opt = sub
24
- elsif sub.is_a? Array
25
- case sub[0].to_i
26
- when 1
27
- opt = Lib::DHCP::Option122::SubOption::Option1.new(sub[1])
28
- when 2
29
- opt = Lib::DHCP::Option122::SubOption::Option2.new(sub[1])
30
- when 3
31
- opt = Lib::DHCP::Option122::SubOption::Option3.new(sub[1])
32
- when 4
33
- opt = Lib::DHCP::Option122::SubOption::Option4.new(*sub[1])
34
- when 5
35
- opt = Lib::DHCP::Option122::SubOption::Option5.new(*sub[1])
36
- when 6
37
- opt = Lib::DHCP::Option122::SubOption::Option6.new(sub[1])
38
- when 7
39
- opt = Lib::DHCP::Option122::SubOption::Option7.new(sub[1])
40
- when 8
41
- opt = Lib::DHCP::Option122::SubOption::Option8.new(sub[1])
42
- else
43
- #raise ArgumentError, "Not implemented sub option #{sub[0]} for Option 122"
44
- opt = Lib::DHCP::Option122::SubOption::Option.new(sub[0].to_i, sub[1])
45
- end
46
- #opt = Lib::DHCP::SubOption.new(sub[0], sub[1])
47
- else
48
- raise ArgumentError, 'Unknown SubOption parameter type'
49
- end
22
+ opt = create_sub_option(sub)
50
23
  sub_options << opt
51
24
  define_singleton_method("option#{opt.oid.to_i}".to_sym) { opt }
52
25
  #define_singleton_method(:option1) {opt}
@@ -54,6 +27,10 @@ module Lib
54
27
  super oid, sub_options
55
28
  end
56
29
 
30
+ def add(sub_option)
31
+ @payload << create_sub_option(sub_option)
32
+ end
33
+
57
34
 
58
35
  def to_s
59
36
  #"Option #{@oid}, LEN #{self.len}, Value #{@payload.to_s}"
@@ -141,10 +118,10 @@ module Lib
141
118
  @type = 1
142
119
  @payload = tsp_server_address
143
120
  when String
144
- if Net::Address::IPv4(tsp_server_address) == tsp_server_address.to_s
145
- @type = 1
121
+ begin
146
122
  @payload = Net::Address::IPv4.new(tsp_server_address)
147
- else
123
+ @type = 1
124
+ rescue ArgumentError
148
125
  @type = 0
149
126
  @payload = tsp_server_address
150
127
  end
@@ -161,16 +138,17 @@ module Lib
161
138
  if type == 1
162
139
  5
163
140
  else
164
- @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten.size + 1
141
+ @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten.size + 2
142
+ #@payload.size + 1
165
143
  end
166
144
  end
167
145
 
168
146
  def pack
169
147
  if @type == 1
170
- [2, self.len.to_i, @payload.to_i].pack('C2N')
148
+ [@oid.to_i, self.len.to_i, 1, @payload.to_i].pack('C3N')
171
149
  elsif @type == 0
172
150
  fqdn_encode = @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten
173
- [2, fqdn_encode.size + 1, *fqdn_encode,0].pack('C*')
151
+ [@oid.to_i, fqdn_encode.size + 2, 0, *fqdn_encode,0].pack('C*')
174
152
  else
175
153
  raise ArgumentError, 'Unknown TSP Provisioning Server Address type'
176
154
  end
@@ -336,6 +314,40 @@ module Lib
336
314
 
337
315
  end
338
316
  end
317
+
318
+ protected
319
+
320
+
321
+ def create_sub_option(option)
322
+ if option.is_a? Lib::DHCP::Option
323
+ option
324
+ elsif option.is_a? Array
325
+ case option[0].to_i
326
+ when 1
327
+ Lib::DHCP::Option122::SubOption::Option1.new(option[1])
328
+ when 2
329
+ Lib::DHCP::Option122::SubOption::Option2.new(option[1])
330
+ when 3
331
+ Lib::DHCP::Option122::SubOption::Option3.new(option[1])
332
+ when 4
333
+ Lib::DHCP::Option122::SubOption::Option4.new(*option[1])
334
+ when 5
335
+ Lib::DHCP::Option122::SubOption::Option5.new(*option[1])
336
+ when 6
337
+ Lib::DHCP::Option122::SubOption::Option6.new(option[1])
338
+ when 7
339
+ Lib::DHCP::Option122::SubOption::Option7.new(option[1])
340
+ when 8
341
+ Lib::DHCP::Option122::SubOption::Option8.new(option[1])
342
+ else
343
+ #raise ArgumentError, "Not implemented sub option #{sub[0]} for Option 122"
344
+ Lib::DHCP::Option122::SubOption::Option.new(option[0].to_i, option[1])
345
+ end
346
+ else
347
+ raise ArgumentError, 'Unknown SubOption for Option122'
348
+ end
349
+ end
350
+
339
351
  end
340
352
  end
341
353
  end
@@ -24,23 +24,23 @@ module Lib
24
24
  end
25
25
 
26
26
  def add(option)
27
- if option.is_a? Array
28
- @options << eval("Lib::DHCP::Option#{option[0]}").new(option[1])
29
- elsif option.is_a? Option
30
- @options << option
31
- else
32
- @options << Lib::DHCP::Option.unpack(option)
33
- end
27
+ @options << create_option(option)
34
28
  end
35
29
 
36
30
  def []=(index, option)
37
- if option.is_a? Array
38
- @options[index] = eval("Lib::DHCP::Option#{option[0]}").new(option[1])
39
- elsif option.is_a? Option
40
- @options[index] = option
31
+ option = create_option(option)
32
+ if include?(option) and @options[index].oid != option.oid
33
+ @options[index] = option if option.oid == 0
41
34
  else
42
- @options << Lib::DHCP::Option.unpack(option)
35
+ @options[index] = create_option(option)
43
36
  end
37
+
38
+ end
39
+
40
+ def include?(option)
41
+ return ! select(option.oid).empty? if option.is_a?(Option)
42
+ return ! select(option).empty? if option.is_a?(Integer)
43
+ false
44
44
  end
45
45
 
46
46
  def select(oid)
@@ -68,6 +68,20 @@ module Lib
68
68
  options
69
69
  end
70
70
 
71
+ protected
72
+
73
+ def create_option(option)
74
+ if option.is_a? Array
75
+ eval("Lib::DHCP::Option#{option[0].to_i}").new(option[1])
76
+ elsif option.is_a? Option
77
+ option
78
+ elsif option.is_a?(Integer) and (option == 0 or option == 255)
79
+ eval("Lib::DHCP::Option#{option.to_i}").new(option.to_i)
80
+ else
81
+ Lib::DHCP::Option.unpack(option)
82
+ end
83
+ end
84
+
71
85
  end
72
86
  end
73
87
  end
@@ -1,5 +1,5 @@
1
1
  module Lib
2
2
  module DHCP
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lib-dhcp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Wojcieszonek
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-07 00:00:00.000000000 Z
11
+ date: 2018-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -402,7 +402,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
402
402
  version: '0'
403
403
  requirements: []
404
404
  rubyforge_project:
405
- rubygems_version: 2.6.14
405
+ rubygems_version: 2.7.5
406
406
  signing_key:
407
407
  specification_version: 4
408
408
  summary: DHCP protocol library.