Fixed a bug in handling block number rollovers.
git-svn-id: https://tftpy.svn.sourceforge.net/svnroot/tftpy/trunk@43 63283fd4-ec1e-0410-9879-cb7f675518damaster
parent
7441f0a43a
commit
d5b7276fb9
15
lib/tftpy.py
15
lib/tftpy.py
|
@ -356,6 +356,7 @@ ERROR | 05 | ErrorCode | ErrMsg | 0 |
|
||||||
self.opcode = 5
|
self.opcode = 5
|
||||||
self.errorcode = 0
|
self.errorcode = 0
|
||||||
self.errmsg = None
|
self.errmsg = None
|
||||||
|
# FIXME - integrate in TftpErrors references?
|
||||||
self.errmsgs = {
|
self.errmsgs = {
|
||||||
1: "File not found",
|
1: "File not found",
|
||||||
2: "Access violation",
|
2: "Access violation",
|
||||||
|
@ -603,9 +604,9 @@ class TftpServer(TftpSession):
|
||||||
logger.debug("New download request, session key = %s"
|
logger.debug("New download request, session key = %s"
|
||||||
% key)
|
% key)
|
||||||
self.handlers[key] = TftpServerHandler(key,
|
self.handlers[key] = TftpServerHandler(key,
|
||||||
TftpState('rrq'),
|
TftpState('rrq'),
|
||||||
self.root,
|
self.root,
|
||||||
listenip)
|
listenip)
|
||||||
self.handlers[key].handle((recvpkt, raddress, rport))
|
self.handlers[key].handle((recvpkt, raddress, rport))
|
||||||
except TftpException, err:
|
except TftpException, err:
|
||||||
logger.error("Fatal exception thrown from handler: %s"
|
logger.error("Fatal exception thrown from handler: %s"
|
||||||
|
@ -865,10 +866,14 @@ class TftpClient(TftpSession):
|
||||||
if isinstance(recvpkt, TftpPacketDAT):
|
if isinstance(recvpkt, TftpPacketDAT):
|
||||||
logger.debug("recvpkt.blocknumber = %d" % recvpkt.blocknumber)
|
logger.debug("recvpkt.blocknumber = %d" % recvpkt.blocknumber)
|
||||||
logger.debug("curblock = %d" % curblock)
|
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"
|
logger.debug("good, received block %d in sequence"
|
||||||
% recvpkt.blocknumber)
|
% recvpkt.blocknumber)
|
||||||
curblock += 1
|
curblock = expected_block
|
||||||
|
|
||||||
|
|
||||||
# ACK the packet, and save the data.
|
# ACK the packet, and save the data.
|
||||||
|
|
Reference in New Issue