Fixed a bug in handling block number rollovers.

git-svn-id: https://tftpy.svn.sourceforge.net/svnroot/tftpy/trunk@43 63283fd4-ec1e-0410-9879-cb7f675518da
master
msoulier 2006-12-15 00:44:33 +00:00
parent 7441f0a43a
commit d5b7276fb9
1 changed files with 10 additions and 5 deletions

View File

@ -356,6 +356,7 @@ ERROR | 05 | ErrorCode | ErrMsg | 0 |
self.opcode = 5
self.errorcode = 0
self.errmsg = None
# FIXME - integrate in TftpErrors references?
self.errmsgs = {
1: "File not found",
2: "Access violation",
@ -603,9 +604,9 @@ class TftpServer(TftpSession):
logger.debug("New download request, session key = %s"
% key)
self.handlers[key] = TftpServerHandler(key,
TftpState('rrq'),
self.root,
listenip)
TftpState('rrq'),
self.root,
listenip)
self.handlers[key].handle((recvpkt, raddress, rport))
except TftpException, err:
logger.error("Fatal exception thrown from handler: %s"
@ -865,10 +866,14 @@ class TftpClient(TftpSession):
if isinstance(recvpkt, TftpPacketDAT):
logger.debug("recvpkt.blocknumber = %d" % recvpkt.blocknumber)
logger.debug("curblock = %d" % curblock)
if recvpkt.blocknumber == curblock+1:
expected_block = curblock + 1
if expected_block > 65535:
logger.debug("block number rollover to 0 again")
expected_block = 0
if recvpkt.blocknumber == expected_block:
logger.debug("good, received block %d in sequence"
% recvpkt.blocknumber)
curblock += 1
curblock = expected_block
# ACK the packet, and save the data.