module NTP::Server::Handler

Public Class Methods

gap() click to toggle source
# File lib/ntp/server/handler.rb, line 56
def self.gap
   @@gap
end
gap=(gap) click to toggle source
# File lib/ntp/server/handler.rb, line 52
def self.gap= gap
   @@gap = gap
end
origin_time() click to toggle source
# File lib/ntp/server/handler.rb, line 48
def self.origin_time
   @@origin_time
end
origin_time=(origin_time) click to toggle source
# File lib/ntp/server/handler.rb, line 44
def self.origin_time= origin_time
   @@origin_time = origin_time
end
reader() click to toggle source
# File lib/ntp/server/handler.rb, line 36
def self.reader
   @@reader
end
reader=(reader) click to toggle source
# File lib/ntp/server/handler.rb, line 40
def self.reader= reader
   @@reader = reader
end
update_gap() click to toggle source
# File lib/ntp/server/handler.rb, line 60
def self.update_gap
   self.reader.sync
   self.gap = self.reader.read_nonblock(1024).to_f
rescue IO::EAGAINWaitReadable
   retry
end

Private Class Methods

included(klass) click to toggle source
# File lib/ntp/server/handler.rb, line 69
def self.included klass
   Signal.trap("USR1") do
      update_gap
   end
end

Public Instance Methods

handler() click to toggle source
# File lib/ntp/server/handler.rb, line 32
def handler
   NTP::Server::Handler
end
make_response(request, receive_time) click to toggle source
# File lib/ntp/server/handler.rb, line 2
def make_response request, receive_time
   time = ::Time.now + self.handler.gap
   response = NTP::Response.new
   response.leap_indicator = 'no warning'
   response.version_number = request.version_number
   response.mode = 'reserved for private use'
   response.stratum = 'non-synchronized'
   response.poll_interval = 6
   response.precision = 0
   response.root_delay = request.timestamp.time - receive_time
   response.root_dispersion = NTP::Time.new(0)
   response.reference_clock_identifier = '127.0.0.1'
   response.reference_timestamp = time
   response.originate_timestamp = self.handler.origin_time
   response.receive_timestamp = receive_time + self.handler.gap
   response.transmit_timestamp = time
   # Kernel.puts response.inspect
   response
end
receive_data(data) click to toggle source
# File lib/ntp/server/handler.rb, line 22
def receive_data data
   receive_time = ::Time.now
   request = NTP::Request.parse( data )
   response = make_response( request, receive_time )
   response.send do |data|
      # Kernel.puts data.unpack("C*").map{|x| sprintf "%.2x", x}.join
      send_data( data )
   end
end