lib-dhcp 0.1.8 → 0.2.0

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
2
  SHA256:
3
- metadata.gz: 6d294d8dc521a8212ee9319d9f95d30a2f456afec63a35a276199526d761c774
4
- data.tar.gz: b9e62cd800c55387539b3d8ef7261de549a03af98039af7c1fbbf4e7f2f4be95
3
+ metadata.gz: 43a9da83b7dd82429f766e5d142f0918a2f5bd823695d54583e04e8be6293bd4
4
+ data.tar.gz: 3b5b782fddf0c68f0949ebf02b3e5d5f5c7cc3b1c04a5a21cd8a4c248be42c24
5
5
  SHA512:
6
- metadata.gz: 9c0e3b4991c7a66c0cd6baee5acf2a181a43de50178861366c27aa0acd0a121ea12e8ffb8ada0a1f651bb80a62835a6d801ee9a035c7191cd144d48e2c3cd56d
7
- data.tar.gz: ce15d018af45026885db14e5cbc8a45b430bedfe69a76b30b6dad9102ddd946f2b6c15ac53e8ee045d7d532e4cf4c8d012f35ee73cc89675586ac1dccb3626ca
6
+ metadata.gz: 8c099424600a5bf373a0518ca8f5ad0687db9a42ee7f1f687664826bce04d193b38812238334e6a0ce11eec93a0d2eb4ea1996df657fd2989a9ed48830dd3edf
7
+ data.tar.gz: 99e3916d6e1a28792408f4885528ba1b00573aff88bef6336ed6033eb1818a83ea00d59cfbfd371811306100817c57b0c86dc98ee75be6a32925c46d57b9807b
@@ -0,0 +1,20 @@
1
+ name: Run Tests
2
+
3
+ on: [ push, pull_request ]
4
+
5
+ jobs:
6
+ test:
7
+ runs-on: ubuntu-latest
8
+
9
+ steps:
10
+ - name: Checkout code
11
+ uses: actions/checkout@v3
12
+
13
+ - name: Set up Ruby
14
+ uses: ruby/setup-ruby@v1
15
+
16
+ - name: Install dependencies
17
+ run: bundle install
18
+
19
+ - name: Run tests
20
+ run: bundle exec rake test
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-3.1.1
1
+ truffleruby-22.3.1
@@ -4,13 +4,17 @@
4
4
 
5
5
 
6
6
  require 'lib/dhcp'
7
+ require 'json'
7
8
 
8
9
  module Lib
9
10
  module DHCP
10
11
  class Message
11
12
  class ACK < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
13
- super(
13
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
14
+ if block_given?
15
+ yield self
16
+ else
17
+ super(
14
18
  :op => BOOTREPLY,
15
19
  :htype => htype,
16
20
  :hlen => hlen,
@@ -25,13 +29,14 @@ module Lib
25
29
  :chaddr => chaddr,
26
30
  :sname => sname,
27
31
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
32
+ )
33
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
34
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
35
+ elsif options.is_a? Lib::DHCP::Option
36
+ self.options.add options
37
+ elsif !options.nil?
38
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
39
+ end
35
40
  end
36
41
 
37
42
  self.options.add Lib::DHCP::Option53.new(ACKNOWLEDGE)
@@ -9,8 +9,11 @@ module Lib
9
9
  module DHCP
10
10
  class Message
11
11
  class Decline < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
13
- super(
12
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
13
+ if block_given?
14
+ yield self
15
+ else
16
+ super(
14
17
  :op => BOOTREQUEST,
15
18
  :htype => htype,
16
19
  :hlen => hlen,
@@ -25,14 +28,16 @@ module Lib
25
28
  :chaddr => chaddr,
26
29
  :sname => sname,
27
30
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
31
+ )
32
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
33
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
34
+ elsif options.is_a? Lib::DHCP::Option
35
+ self.options.add options
36
+ elsif !options.nil?
37
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
38
+ end
35
39
  end
40
+
36
41
  self.options.add Lib::DHCP::Option53.new(DECLINE)
37
42
  end
38
43
 
@@ -9,8 +9,11 @@ module Lib
9
9
  module DHCP
10
10
  class Message
11
11
  class Discover < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options:nil)
13
- super(
12
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
13
+ if block_given?
14
+ yield self
15
+ else
16
+ super(
14
17
  :op => BOOTREQUEST,
15
18
  :htype => htype,
16
19
  :hlen => hlen,
@@ -25,13 +28,14 @@ module Lib
25
28
  :chaddr => chaddr,
26
29
  :sname => sname,
27
30
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
31
+ )
32
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
33
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
34
+ elsif options.is_a? Lib::DHCP::Option
35
+ self.options.add options
36
+ elsif !options.nil?
37
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
38
+ end
35
39
  end
36
40
  self.options.add Lib::DHCP::Option53.new(DISCOVER)
37
41
  end
@@ -9,8 +9,11 @@ module Lib
9
9
  module DHCP
10
10
  class Message
11
11
  class Inform < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
13
- super(
12
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
13
+ if block_given?
14
+ yield self
15
+ else
16
+ super(
14
17
  :op => BOOTREQUEST,
15
18
  :htype => htype,
16
19
  :hlen => hlen,
@@ -25,13 +28,14 @@ module Lib
25
28
  :chaddr => chaddr,
26
29
  :sname => sname,
27
30
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
31
+ )
32
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
33
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
34
+ elsif options.is_a? Lib::DHCP::Option
35
+ self.options.add options
36
+ elsif !options.nil?
37
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
38
+ end
35
39
  end
36
40
  self.options.add Lib::DHCP::Option53.new(INFORM)
37
41
  end
@@ -9,8 +9,11 @@ module Lib
9
9
  module DHCP
10
10
  class Message
11
11
  class LeaseActive < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
13
- super(
12
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
13
+ if block_given?
14
+ yield self
15
+ else
16
+ super(
14
17
  :op => BOOTREPLY,
15
18
  :htype => htype,
16
19
  :hlen => hlen,
@@ -25,13 +28,14 @@ module Lib
25
28
  :chaddr => chaddr,
26
29
  :sname => sname,
27
30
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
31
+ )
32
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
33
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
34
+ elsif options.is_a? Lib::DHCP::Option
35
+ self.options.add options
36
+ elsif !options.nil?
37
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
38
+ end
35
39
  end
36
40
 
37
41
  self.options.add Lib::DHCP::Option53.new(LEASE_ACTIVE)
@@ -9,8 +9,11 @@ module Lib
9
9
  module DHCP
10
10
  class Message
11
11
  class LeaseQuery < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
13
- super(
12
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
13
+ if block_given?
14
+ yield self
15
+ else
16
+ super(
14
17
  :op => BOOTREQUEST,
15
18
  :htype => htype,
16
19
  :hlen => hlen,
@@ -25,16 +28,16 @@ module Lib
25
28
  :chaddr => chaddr,
26
29
  :sname => sname,
27
30
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
31
+ )
32
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
33
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
34
+ elsif options.is_a? Lib::DHCP::Option
35
+ self.options.add options
36
+ elsif !options.nil?
37
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
38
+ end
35
39
  end
36
40
  self.options.add Lib::DHCP::Option53.new(LEASE_QUERY)
37
-
38
41
  end
39
42
 
40
43
  def pack
@@ -9,8 +9,11 @@ module Lib
9
9
  module DHCP
10
10
  class Message
11
11
  class LeaseUnassigned < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
13
- super(
12
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
13
+ if block_given?
14
+ yield self
15
+ else
16
+ super(
14
17
  :op => BOOTREPLY,
15
18
  :htype => htype,
16
19
  :hlen => hlen,
@@ -25,13 +28,14 @@ module Lib
25
28
  :chaddr => chaddr,
26
29
  :sname => sname,
27
30
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
31
+ )
32
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
33
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
34
+ elsif options.is_a? Lib::DHCP::Option
35
+ self.options.add options
36
+ elsif !options.nil?
37
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
38
+ end
35
39
  end
36
40
  self.options.add Lib::DHCP::Option53.new(LEASE_UNASSIGNED)
37
41
  end
@@ -9,8 +9,11 @@ module Lib
9
9
  module DHCP
10
10
  class Message
11
11
  class LeaseUnknown < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
13
- super(
12
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
13
+ if block_given?
14
+ yield self
15
+ else
16
+ super(
14
17
  :op => BOOTREPLY,
15
18
  :htype => htype,
16
19
  :hlen => hlen,
@@ -25,13 +28,14 @@ module Lib
25
28
  :chaddr => chaddr,
26
29
  :sname => sname,
27
30
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
31
+ )
32
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
33
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
34
+ elsif options.is_a? Lib::DHCP::Option
35
+ self.options.add options
36
+ elsif !options.nil?
37
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
38
+ end
35
39
  end
36
40
  self.options.add Lib::DHCP::Option53.new(LEASE_UNKNOWN)
37
41
  end
@@ -270,11 +270,6 @@ module Lib
270
270
  super
271
271
  end
272
272
 
273
- # protected :op=
274
- # # noinspection RubyResolve
275
- # protected :option53=
276
-
277
-
278
273
  protected
279
274
 
280
275
  def sanity_check
@@ -9,8 +9,11 @@ module Lib
9
9
  module DHCP
10
10
  class Message
11
11
  class NACK < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
13
- super(
12
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
13
+ if block_given?
14
+ yield self
15
+ else
16
+ super(
14
17
  :op => BOOTREPLY,
15
18
  :htype => htype,
16
19
  :hlen => hlen,
@@ -25,13 +28,14 @@ module Lib
25
28
  :chaddr => chaddr,
26
29
  :sname => sname,
27
30
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
31
+ )
32
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
33
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
34
+ elsif options.is_a? Lib::DHCP::Option
35
+ self.options.add options
36
+ elsif !options.nil?
37
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
38
+ end
35
39
  end
36
40
  self.options.add Lib::DHCP::Option53.new(NOT_ACKNOWLEDGE)
37
41
  end
@@ -9,8 +9,11 @@ module Lib
9
9
  module DHCP
10
10
  class Message
11
11
  class Offer < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
13
- super(
12
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
13
+ if block_given?
14
+ yield self
15
+ else
16
+ super(
14
17
  :op => BOOTREPLY,
15
18
  :htype => htype,
16
19
  :hlen => hlen,
@@ -25,13 +28,14 @@ module Lib
25
28
  :chaddr => chaddr,
26
29
  :sname => sname,
27
30
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
31
+ )
32
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
33
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
34
+ elsif options.is_a? Lib::DHCP::Option
35
+ self.options.add options
36
+ elsif !options.nil?
37
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
38
+ end
35
39
  end
36
40
  self.options.add Lib::DHCP::Option53.new(OFFER)
37
41
  end
@@ -9,8 +9,11 @@ module Lib
9
9
  module DHCP
10
10
  class Message
11
11
  class Release < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
13
- super(
12
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
13
+ if block_given?
14
+ yield self
15
+ else
16
+ super(
14
17
  :op => BOOTREQUEST,
15
18
  :htype => htype,
16
19
  :hlen => hlen,
@@ -25,13 +28,14 @@ module Lib
25
28
  :chaddr => chaddr,
26
29
  :sname => sname,
27
30
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
31
+ )
32
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
33
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
34
+ elsif options.is_a? Lib::DHCP::Option
35
+ self.options.add options
36
+ elsif !options.nil?
37
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
38
+ end
35
39
  end
36
40
  self.options.add Lib::DHCP::Option53.new(RELEASE)
37
41
  end
@@ -9,8 +9,11 @@ module Lib
9
9
  module DHCP
10
10
  class Message
11
11
  class Request < Message
12
- def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
13
- super(
12
+ def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: 0, sname: '.', file: '.', options: nil)
13
+ if block_given?
14
+ yield self
15
+ else
16
+ super(
14
17
  :op => BOOTREQUEST,
15
18
  :htype => htype,
16
19
  :hlen => hlen,
@@ -25,13 +28,14 @@ module Lib
25
28
  :chaddr => chaddr,
26
29
  :sname => sname,
27
30
  :file => file
28
- )
29
- if options.is_a? Array or options.is_a? Lib::DHCP::Options
30
- options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
31
- elsif options.is_a? Lib::DHCP::Option
32
- self.options.add options
33
- elsif !options.nil?
34
- raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
31
+ )
32
+ if options.is_a? Array or options.is_a? Lib::DHCP::Options
33
+ options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
34
+ elsif options.is_a? Lib::DHCP::Option
35
+ self.options.add options
36
+ elsif !options.nil?
37
+ raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
38
+ end
35
39
  end
36
40
  self.options.add Lib::DHCP::Option53.new(REQUEST)
37
41
  end
@@ -45,6 +45,24 @@ module Lib
45
45
  NAME[@oid.to_i]
46
46
  end
47
47
 
48
+ def to_json(*params)
49
+ self.to_h.to_json
50
+ end
51
+
52
+ def to_h
53
+ {
54
+ name: self.name,
55
+ oid: self.oid.to_i,
56
+ len: self.len,
57
+ value: self.value.respond_to?(:map) ? self.value.map { |v| v.respond_to?(:to_h) ? v.to_h : v } : self.value
58
+ }
59
+ end
60
+
61
+ def self.from_json(json)
62
+ json = json.is_a?(Hash) ? json : JSON.parse(json)
63
+ self.new(json.transform_keys(&:to_sym)[:oid], json.transform_keys(&:to_sym)[:value])
64
+ end
65
+
48
66
  def self.unpack(packet)
49
67
  oid, len = packet.unpack('C2')
50
68
  payload = nil
@@ -11,8 +11,6 @@ module Lib
11
11
  # DHCP MESSAGE TYPE - This option is used to convey the type of the DHCP message.
12
12
  # The code for this option is 53, and its length is 1.
13
13
 
14
- def_delegators :@payload, :to_s
15
-
16
14
  def initialize(message_type)
17
15
  raise ArgumentError, "Illegal value for DHCP Message Type = #{message_type}" unless (1..255).include? message_type.to_i
18
16
  super MESSAGE_TYPE, message_type.to_i
@@ -3,6 +3,7 @@
3
3
  # Copyright 22.12.2017 by Piotr Wojcieszonek
4
4
 
5
5
  require 'forwardable'
6
+ require 'json'
6
7
 
7
8
  module Lib
8
9
  module DHCP
@@ -24,7 +25,15 @@ module Lib
24
25
  end
25
26
 
26
27
  def add(option)
27
- @options << create_option(option)
28
+ option = begin
29
+ JSON.parse(option)
30
+ rescue JSON::ParserError
31
+ option
32
+ rescue TypeError
33
+ option
34
+ end
35
+ option = create_option(option)
36
+ @options << option unless self.include? option
28
37
  end
29
38
 
30
39
  def []=(index, option)
@@ -63,7 +72,6 @@ module Lib
63
72
  options << option
64
73
  break if option.oid == Lib::DHCP::Option::END_OPTION
65
74
  offset += (option.len.to_i + 2)
66
- #(option.oid == 0 or option.oid == 255) ? offset += (option.len.to_i + 1) : offset += (option.len.to_i + 2)
67
75
  end
68
76
  options
69
77
  end
@@ -72,11 +80,13 @@ module Lib
72
80
 
73
81
  def create_option(option)
74
82
  if option.is_a? Array
75
- eval("Lib::DHCP::Option#{option[0].to_i}").new(option[1])
83
+ Lib::DHCP.const_get("Option#{option[0].to_i}").new(option[1])
76
84
  elsif option.is_a? Option
77
85
  option
78
86
  elsif option.is_a?(Integer) and (option == 0 or option == 255)
79
- eval("Lib::DHCP::Option#{option.to_i}").new(option.to_i)
87
+ Lib::DHCP.const_get("Option#{option.to_i}").new
88
+ elsif option.is_a? Hash
89
+ Lib::DHCP.const_get("Option#{option.transform_keys(&:to_sym)[:oid].to_i}").new(option.transform_keys(&:to_sym)[:value])
80
90
  else
81
91
  Lib::DHCP::Option.unpack(option)
82
92
  end
@@ -29,6 +29,10 @@ module Lib
29
29
 
30
30
  end
31
31
 
32
+ def to_h
33
+ super.merge({ options: self.options.map(&:to_h) })
34
+ end
35
+
32
36
  def option0
33
37
  self.options.select 0
34
38
  end
@@ -57,6 +61,16 @@ module Lib
57
61
  @options ||= Lib::DHCP::Options.new
58
62
  end
59
63
 
64
+ def options=(opt)
65
+ if opt.respond_to? :each
66
+ opt.each do |option|
67
+ self.options.add(option)
68
+ end
69
+ else
70
+ self.options.add opt
71
+ end
72
+ end
73
+
60
74
  def self.unpack(packet)
61
75
  bootp, cookie, options = packet.unpack('a236Na*')
62
76
  raise RuntimeError, "Magick-Cookie mismatch #{cookie.to_i.to_s(16)}" unless cookie.to_i == MAGICK_COOKIE.to_i
@@ -65,6 +79,12 @@ module Lib
65
79
  dhcp
66
80
  end
67
81
 
82
+ # def self.from_json(json)
83
+ # #json = json.is_a?(Hash) ? json : JSON.parse(json)
84
+ # super
85
+ # #self.options = json['options']
86
+ # end
87
+
68
88
  def pack
69
89
  # TODO Max Message Size support
70
90
  dhcp_message = super # BOOTP Header
@@ -1,5 +1,5 @@
1
1
  module Lib
2
2
  module DHCP
3
- VERSION = '0.1.8'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
data/lib-dhcp.gemspec CHANGED
@@ -26,6 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'rake'
27
27
  spec.add_development_dependency 'minitest'
28
28
 
29
- spec.add_dependency 'lib-bootp', '~> 0.1'
30
- spec.add_dependency 'net-address', '~> 0.1'
29
+ spec.add_dependency 'lib-bootp', '~> 0.2.5'
30
+ spec.add_dependency 'net-address', '~> 0.2.2'
31
31
  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.8
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Wojcieszonek
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-13 00:00:00.000000000 Z
11
+ date: 2023-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,28 +58,28 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.1'
61
+ version: 0.2.5
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.1'
68
+ version: 0.2.5
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: net-address
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.1'
75
+ version: 0.2.2
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.1'
82
+ version: 0.2.2
83
83
  description: Set of classes to low level handle the BOOTP protocol.
84
84
  email:
85
85
  - piotr@wojcieszonek.pl
@@ -89,6 +89,7 @@ extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
91
  - ".github/workflows/gem-push.yml"
92
+ - ".github/workflows/run-test.yml"
92
93
  - ".gitignore"
93
94
  - ".ruby-gemset"
94
95
  - ".ruby-version"
@@ -388,7 +389,7 @@ homepage: https://github.com/pwojcieszonek/lib-dhcp
388
389
  licenses:
389
390
  - MIT
390
391
  metadata: {}
391
- post_install_message:
392
+ post_install_message:
392
393
  rdoc_options: []
393
394
  require_paths:
394
395
  - lib
@@ -403,8 +404,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
403
404
  - !ruby/object:Gem::Version
404
405
  version: '0'
405
406
  requirements: []
406
- rubygems_version: 3.3.7
407
- signing_key:
407
+ rubygems_version: 3.2.32
408
+ signing_key:
408
409
  specification_version: 4
409
410
  summary: DHCP protocol library.
410
411
  test_files: []