Sha256: 1cedeae31937eb6e1bf5b3faa7f2900046816c73b246fa68fa3bcac63e9f3bdc

Contents?: true

Size: 1.86 KB

Versions: 6

Compression:

Stored size: 1.86 KB

Contents

#Author: Piotr Wojcieszonek
#e-mail: piotr@wojcieszonek.pl
# Copyright 24.03.2016 by Piotr Wojcieszonek


require 'lib/dhcp'

module Lib
  module DHCP
    class Message
      class ACK < Message
        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)
          super(
              :op     => BOOTREPLY,
              :htype  => htype,
              :hlen   => hlen,
              :hops   => hops,
              :xid    => xid,
              :secs   => secs,
              :flags  => flags,
              :ciaddr => ciaddr,
              :yiaddr => yiaddr,
              :siaddr => siaddr,
              :giaddr => giaddr,
              :chaddr => chaddr,
              :sname  => sname,
              :file   => file
          )
          if options.is_a? Array or options.is_a? Lib::DHCP::Options
            options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
          elsif options.is_a? Lib::DHCP::Option
            self.options.add options
          elsif !options.nil?
            raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
          end

          self.options.add Lib::DHCP::Option53.new(ACKNOWLEDGE)
        end

        def pack
          # noinspection RubyResolve
          self.option53 = ACKNOWLEDGE
          self.op = BOOTREPLY
          sanity_check
          super
        end

        def self.unpack(packet)
          res = super packet
          raise TypeError, "No implicit conversion of #{res.class.name} into #{self.class.name}" unless res.is_a? self.class
          res
        end

        protected :op=
        # noinspection RubyResolve
        protected :option53=

        protected
        def sanity_check
          #TODO ACK Sanity Check
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
lib-dhcp-0.1.8 lib/lib/dhcp/messages/ack.rb
lib-dhcp-0.1.4 lib/lib/dhcp/messages/ack.rb
lib-dhcp-0.1.3 lib/lib/dhcp/messages/ack.rb
lib-dhcp-0.1.2 lib/lib/dhcp/messages/ack.rb
lib-dhcp-0.1.1 lib/lib/dhcp/messages/ack.rb
lib-dhcp-0.1.0 lib/lib/dhcp/messages/ack.rb