git-svn-id: http://svn.code.sf.net/p/netboot65/code@41 93682198-c243-4bdb-bd91-e943c89aac3b

This commit is contained in:
jonnosan 2009-02-12 09:58:16 +00:00
parent 6eb041bd53
commit b6645f9eea
3 changed files with 60 additions and 5 deletions

View File

@ -302,7 +302,7 @@ CATALOG OFFSET: $#{"%04x" % catalog_offset}"
attr_reader :track_no,:sector_no,:sector_length,:volume_name
OPCODE=0x02
def initialize(args={})
args[:opcode]=OPCODE
args[:opcode]=OPCODE
[:track_no,:sector_no,:sector_length,:volume_name].each do |arg|
raise "#{arg} must be specified in a #{self.class}" if args[arg].nil?
end
@ -359,6 +359,24 @@ SECTOR LENGTH: $#{"%04x" % sector_length}"
end
end
class SectorWriteRequestMessage < SectorReadResponseMessage
OPCODE=0x03
def initialize(args={})
super(args)
@opcode=OPCODE
end
end
class SectorWriteResponseMessage < SectorReadRequestMessage
OPCODE=0x83
def initialize(args={})
super(args)
@opcode=OPCODE
end
end
class CreateVolumeRequestMessage < BaseMessage
attr_reader :system_architecture,:volume_name,:track_count,:sector_length
OPCODE=0x04

View File

@ -83,6 +83,34 @@ class TNDPServer
end
end
end
when TNDP::SectorWriteRequestMessage::OPCODE
file_system_image=nil
begin
file_system_image_path="#{@root_directory}/#{request.volume_name}"
file_system_image=RipXplore.best_fit_from_filename(file_system_image_path)
rescue Exception=>e
response=TNDP::ErrorResponseMessage.create_error_response(data,TNDP::ErrorCodes::INVALID_VOLUME_NAME,e.to_s)
end
if !(file_system_image.nil?) then
track_no=request.track_no
sector_no=request.sector_no
sector_length=request.sector_length
sector_data=request.sector_data
if (track_no<file_system_image.start_track) || (track_no>file_system_image.end_track) then
response=TNDP::ErrorResponseMessage.create_error_response(data,TNDP::ErrorCodes::INVALID_TRACK_NUMBER,"requested track $#{"%X"% track_no} outside allowable range of $#{"%X"% file_system_image.start_track}..$#{"%X"% file_system_image.end_track}")
else
existing_sector_data=file_system_image.get_sector(track_no,sector_no)
if existing_sector_data.nil? then
response=TNDP::ErrorResponseMessage.create_error_response(data,TNDP::ErrorCodes::INVALID_SECTOR_NUMBER,"requested sector $#{"%X"% sector_no} not found in track $#{"%X"% track_no}")
elsif (existing_sector_data.length)!=sector_length then
response=TNDP::ErrorResponseMessage.create_error_response(data,TNDP::ErrorCodes::INVALID_SECTOR_LENGTH,"requested track $#{"%X"% track_no}/sector $#{"%X"% sector_no} is of length $#{"%X"% sector_data.length}, not $#{"%X"% sector_length}")
else
file_system_image.set_sector(track_no,sector_no,sector_data)
file_system_image.save_as(file_system_image_path)
response=TNDP::SectorWriteResponseMessage.new({:track_no=>track_no,:sector_no=>sector_no,:sector_length=>sector_length,:volume_name=>request.volume_name})
end
end
end
when TNDP::CreateVolumeRequestMessage::OPCODE
volume_file="#{@root_directory}/#{request.volume_name}"
volume_creation_paramaters=VOLUME_CREATION_PARAMATERS[request.system_architecture]

View File

@ -44,18 +44,27 @@ class TestServer <Test::Unit::TestCase
].each do |a|
#try to make a new blank disk
system_architecture=a[0]
image_name=a[1]
volume_name=a[1]
track_count=a[2]
sector_length=a[3]
image_full_path="#{TEST_IMAGES_DIR}\\#{image_name}"
image_full_path="#{TEST_IMAGES_DIR}\\#{volume_name}"
File.delete(image_full_path) if File.exist?(image_full_path)
create_volume_request_msg=TNDP::CreateVolumeRequestMessage.new({:volume_name=>image_name,:system_architecture=>system_architecture,:track_count=>track_count,:sector_length=>sector_length})
create_volume_request_msg=TNDP::CreateVolumeRequestMessage.new({:volume_name=>volume_name,:system_architecture=>system_architecture,:track_count=>track_count,:sector_length=>sector_length})
create_volume_response_msg=send_request_and_get_response(create_volume_request_msg)
assert_equal(TNDP::CreateVolumeResponseMessage::OPCODE,create_volume_response_msg.opcode,"init volume request message should have correct opcode")
assert_equal(TNDP::CreateVolumeResponseMessage::OPCODE,create_volume_response_msg.opcode,"init volume response message should have correct opcode")
assert_equal(system_architecture,create_volume_response_msg.system_architecture)
assert(File.exist?(image_full_path),"file just created should exist at #{image_full_path}")
sector_data=([system_architecture.to_s,volume_name,track_count,sector_length].pack("Z12Z30CC")*200)[0,sector_length]
track_no=track_count-1
sector_no=1
sector_write_request_msg=TNDP::SectorWriteRequestMessage.new({:track_no=>track_no,:sector_no=>sector_no,:sector_length=>sector_length,:volume_name=>volume_name,:sector_data=>sector_data})
sector_write_response_msg=send_request_and_get_response(sector_write_request_msg)
assert_equal(TNDP::SectorWriteResponseMessage::OPCODE,sector_write_response_msg.opcode,"sector write response message should have correct opcode")
file_system_image=RipXplore.best_fit_from_filename(image_full_path)
assert_equal(track_count,file_system_image.track_count,"file just created should have correct number of tracks")
assert_equal(sector_data,file_system_image.get_sector(track_no,sector_no),"file just created should have sector data set correctly")
end
raise "done"
#test every combination of host and file system