From f5887251ddb8d19cc045fa9a7b20cc33c173bdaa Mon Sep 17 00:00:00 2001 From: jonnosan Date: Sun, 11 Jan 2009 02:33:47 +0000 Subject: [PATCH] skeleton of netboot65 server git-svn-id: http://svn.code.sf.net/p/netboot65/code@9 93682198-c243-4bdb-bd91-e943c89aac3b --- server/netboot65_server.rb | 1 + server/netboot65_tftp.rb | 43 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 server/netboot65_tftp.rb diff --git a/server/netboot65_server.rb b/server/netboot65_server.rb index dd7264a..6f1a623 100644 --- a/server/netboot65_server.rb +++ b/server/netboot65_server.rb @@ -5,6 +5,7 @@ # # + def log_msg(msg) puts "#{Time.now} #{msg}" end diff --git a/server/netboot65_tftp.rb b/server/netboot65_tftp.rb new file mode 100644 index 0000000..aa37284 --- /dev/null +++ b/server/netboot65_tftp.rb @@ -0,0 +1,43 @@ +# +# minimal TFTP server implementation for use with netboot65 +# +# Jonno Downes (jonno@jamtronix.com) - January, 2009 +# +# + +require 'socket' +class Netboot65TFTPServer + + attr_reader :bootfile_dir,:port,:server_thread + def initialize(bootfile_dir,port=6969) + @bootfile_dir=bootfile_dir + @port=port + @server_thread=nil + end + + def start() + log_msg "TFTP: serving #{bootfile_dir} on port #{port}" + Socket.do_not_reverse_lookup = true + @server_thread=Thread.start do + + loop do + socket=UDPSocket.open + socket.setsockopt Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1 + log_msg "waiting for TFTP client to connect" + socket.bind(nil,port) + data,addr_info=socket.recvfrom(4096) + client_ip=addr_info[3] + client_port=addr_info[1] + log_msg "TFTP: connect from #{client_ip}:#{client_port}" + socket.close + end + end + #server_thread.join + end + + def shutdown() + log_msg "TFTP: stopping" + server_thread.kill + end + +end \ No newline at end of file