mirror of
https://github.com/bobbimanners/emailler.git
synced 2024-08-07 07:29:03 +00:00
git-svn-id: http://svn.code.sf.net/p/netboot65/code@22 93682198-c243-4bdb-bd91-e943c89aac3b
This commit is contained in:
parent
830d271979
commit
06f15c715e
@ -33,7 +33,7 @@ module TNDP
|
|||||||
}
|
}
|
||||||
|
|
||||||
MAX_CATALOG_ENTRIES_PER_MESSAGE=8
|
MAX_CATALOG_ENTRIES_PER_MESSAGE=8
|
||||||
MAX_VOLUME_NAME_LENGTH=57
|
MAX_VOLUME_NAME_LENGTH=127
|
||||||
SYSTEM_ARCHITECTURES={
|
SYSTEM_ARCHITECTURES={
|
||||||
:any=>0x00,
|
:any=>0x00,
|
||||||
:c64=>0x64,
|
:c64=>0x64,
|
||||||
@ -154,10 +154,6 @@ OPCODE: $#{"%02X"%opcode} [#{OPCODES[opcode].nil? ? "UNKNOWN" : OPCODES[
|
|||||||
TNDP.hex_dump(raw_bytes)
|
TNDP.hex_dump(raw_bytes)
|
||||||
end
|
end
|
||||||
def initialize(args={})
|
def initialize(args={})
|
||||||
# puts "args:"
|
|
||||||
# args.keys.each do |key|
|
|
||||||
# puts "#{key}: #{args[key]}\n"
|
|
||||||
# end
|
|
||||||
@signature=TNDP.coalesce(args[:signature],MESSAGE_SIGNATURE)
|
@signature=TNDP.coalesce(args[:signature],MESSAGE_SIGNATURE)
|
||||||
@version_id=TNDP.coalesce(args[:version_id],0x01)
|
@version_id=TNDP.coalesce(args[:version_id],0x01)
|
||||||
@transaction_id=TNDP.coalesce(args[:transaction_id],TNDP.next_transaction_id)
|
@transaction_id=TNDP.coalesce(args[:transaction_id],TNDP.next_transaction_id)
|
||||||
@ -337,22 +333,25 @@ SECTOR LENGTH: $#{"%04x" % sector_length}"
|
|||||||
end
|
end
|
||||||
|
|
||||||
class SectorReadResponseMessage < SectorReadRequestMessage
|
class SectorReadResponseMessage < SectorReadRequestMessage
|
||||||
|
OPCODE=0x82
|
||||||
attr_reader :sector_data
|
attr_reader :sector_data
|
||||||
def initialize(args={})
|
def initialize(args={})
|
||||||
raise "sector_data must be specified in a #{self.class}" if args[:sector_data].nil?
|
raise "sector_data must be specified in a #{self.class}" if args[:sector_data].nil?
|
||||||
@sector_data=args[:sector_data]
|
@sector_data=args[:sector_data]
|
||||||
super(args)
|
super(args)
|
||||||
|
@opcode=OPCODE
|
||||||
|
raise "length of sector_data #{@sector_data.length} must match specified sector_length #{@sector_length}" unless @sector_data.length==@sector_length
|
||||||
end
|
end
|
||||||
def to_s
|
def to_s
|
||||||
super+"\nSECTOR DATA:\n"+TNDP.hex_dump(sector_data)
|
super+"\nSECTOR DATA:\n"+TNDP.hex_dump(sector_data)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_buffer
|
def to_buffer
|
||||||
super+sector_data.pack("C#{sector_length}")
|
super+[sector_data].pack("A#{sector_length}")
|
||||||
end
|
end
|
||||||
|
|
||||||
def from_buffer
|
def self.from_buffer(buffer)
|
||||||
signature,version_id,transaction_id,opcode,track_no,sector_no,sector_length,volume_name,sector_data=buffer.unpack("Z4CnCnnnZ#{TNDP::MAX_VOLUME_NAME_LENGTH+1}C*")
|
signature,version_id,transaction_id,opcode,track_no,sector_no,sector_length,volume_name,sector_data=buffer.unpack("Z4CnCnnnZ#{TNDP::MAX_VOLUME_NAME_LENGTH+1}a*")
|
||||||
self.new({:signature=>signature,:version=>version_id,:transaction_id=>transaction_id,
|
self.new({:signature=>signature,:version=>version_id,:transaction_id=>transaction_id,
|
||||||
:opcode=>opcode,:track_no=>track_no,:sector_no=>sector_no,:sector_length=>sector_length,:volume_name=>volume_name,:sector_data=>sector_data})
|
:opcode=>opcode,:track_no=>track_no,:sector_no=>sector_no,:sector_length=>sector_length,:volume_name=>volume_name,:sector_data=>sector_data})
|
||||||
end
|
end
|
||||||
|
@ -68,6 +68,15 @@ class TNDPServer
|
|||||||
sector_length=request.sector_length
|
sector_length=request.sector_length
|
||||||
if (track_no<file_system_image.start_track) || (track_no>file_system_image.end_track) then
|
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}")
|
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
|
||||||
|
sector_data=file_system_image.get_sector(track_no,sector_no)
|
||||||
|
if 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 (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
|
||||||
|
response=TNDP::SectorReadResponseMessage.new({:track_no=>track_no,:sector_no=>sector_no,:sector_length=>sector_length,:volume_name=>request.volume_name,:sector_data=>sector_data})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -75,7 +84,7 @@ class TNDPServer
|
|||||||
end
|
end
|
||||||
response.transaction_id=request.transaction_id
|
response.transaction_id=request.transaction_id
|
||||||
rescue Exception=>e
|
rescue Exception=>e
|
||||||
response=TNDP::ErrorResponseMessage.create_error_response(data,TNDP::ErrorCodes::INTERNAL_SERVER_ERROR,e.to_s)
|
response=TNDP::ErrorResponseMessage.create_error_response(data,TNDP::ErrorCodes::INTERNAL_SERVER_ERROR,e.to_s+e.backtrace[0])
|
||||||
end
|
end
|
||||||
log_msg("Response:")
|
log_msg("Response:")
|
||||||
log_msg(response.to_s)
|
log_msg(response.to_s)
|
||||||
|
@ -63,11 +63,13 @@ class TestServer <Test::Unit::TestCase
|
|||||||
assert_equal(TNDP::ErrorCodes::INVALID_SECTOR_LENGTH,send_request_and_get_response(TNDP::SectorReadRequestMessage.new({:track_no=>track_no,:sector_no=>sector_no,:sector_length=>0xD00D,:volume_name=>volume_name})).errorcode,"invalid sector length should return error")
|
assert_equal(TNDP::ErrorCodes::INVALID_SECTOR_LENGTH,send_request_and_get_response(TNDP::SectorReadRequestMessage.new({:track_no=>track_no,:sector_no=>sector_no,:sector_length=>0xD00D,:volume_name=>volume_name})).errorcode,"invalid sector length should return error")
|
||||||
|
|
||||||
file_system_image=RipXplore.best_fit_from_filename("#{TEST_IMAGES_DIR}/#{volume_name}")
|
file_system_image=RipXplore.best_fit_from_filename("#{TEST_IMAGES_DIR}/#{volume_name}")
|
||||||
|
assert_equal(sector_length,file_system_image.get_sector(track_no,sector_no).length,"sector as read from disk should be of correct length")
|
||||||
sector_read_request_msg=TNDP::SectorReadRequestMessage.new({:track_no=>track_no,:sector_no=>sector_no,:sector_length=>sector_length,:volume_name=>volume_name})
|
sector_read_request_msg=TNDP::SectorReadRequestMessage.new({:track_no=>track_no,:sector_no=>sector_no,:sector_length=>sector_length,:volume_name=>volume_name})
|
||||||
sector_read_response_msg=send_request_and_get_response(sector_read_request_msg)
|
sector_read_response_msg=send_request_and_get_response(sector_read_request_msg)
|
||||||
|
|
||||||
assert(sector_read_response_msg.respond_to?(:sector_data),"sector read response message should include sector data")
|
assert(sector_read_response_msg.respond_to?(:sector_data),"sector read response message should include sector data")
|
||||||
assert(file_system_image.get_sector(track_no,sector_no)==sector_read_response_msg.sector_data,"data returned from server should match data read directly from disk")
|
assert_equal(sector_length,sector_read_response_msg.sector_data.length,"sector read response message should include full length sector")
|
||||||
|
assert_equal(TNDP.hex_dump(file_system_image.get_sector(track_no,sector_no)),TNDP.hex_dump(sector_read_response_msg.sector_data),"data returned from server should match data read directly from disk")
|
||||||
end
|
end
|
||||||
catalog_offset+=volume_catalog_response_msg.catalog_entries.length
|
catalog_offset+=volume_catalog_response_msg.catalog_entries.length
|
||||||
done=(catalog_offset>volume_catalog_response_msg.total_catalog_size-1)
|
done=(catalog_offset>volume_catalog_response_msg.total_catalog_size-1)
|
||||||
|
Loading…
Reference in New Issue
Block a user