summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael P. Soulier <msoulier@digitaltorque.ca>2009-04-10 22:48:51 -0400
committerMichael P. Soulier <msoulier@digitaltorque.ca>2009-04-10 22:48:51 -0400
commit41bf3a25e615edc2192c2639be7f4a713e48c5ef (patch)
treeb22d86290c33ffae80bfda171c76f6e5b39c35d5
parentbd2e19529f451548ccbda194a369cd2a28dddf56 (diff)
downloadtftpy-41bf3a25e615edc2192c2639be7f4a713e48c5ef.tar.gz
Improving sample client output on error and fixing default blocksize when
server ignores options.
-rwxr-xr-xbin/tftpy_client.py28
-rw-r--r--tftpy/TftpClient.py6
2 files changed, 22 insertions, 12 deletions
diff --git a/bin/tftpy_client.py b/bin/tftpy_client.py
index ce395cc..4671f6f 100755
--- a/bin/tftpy_client.py
+++ b/bin/tftpy_client.py
@@ -87,18 +87,22 @@ def main():
tclient = tftpy.TftpClient(options.host,
int(options.port),
tftp_options)
- if(options.filename):
- if not options.output:
- options.output = os.path.basename(options.filename)
- tclient.download(options.filename,
- options.output,
- progresshook)
- elif(options.upload):
- if not options.input:
- options.input = os.path.basename(options.upload)
- tclient.upload(options.upload,
- options.input,
- progresshook)
+ try:
+ if options.filename:
+ if not options.output:
+ options.output = os.path.basename(options.filename)
+ tclient.download(options.filename,
+ options.output,
+ progresshook)
+ elif options.upload:
+ if not options.input:
+ options.input = os.path.basename(options.upload)
+ tclient.upload(options.upload,
+ options.input,
+ progresshook)
+ except tftpy.TftpException, err:
+ sys.stderr.write("%s\n" % str(err))
+ sys.exit(1)
if __name__ == '__main__':
main()
diff --git a/tftpy/TftpClient.py b/tftpy/TftpClient.py
index 0935c61..a840689 100644
--- a/tftpy/TftpClient.py
+++ b/tftpy/TftpClient.py
@@ -119,6 +119,12 @@ class TftpClient(TftpSession):
if isinstance(recvpkt, TftpPacketDAT):
logger.debug("recvpkt.blocknumber = %d" % recvpkt.blocknumber)
logger.debug("curblock = %d" % curblock)
+
+ if self.state.state == 'rrq' and self.options:
+ logger.info("no OACK, our options were ignored")
+ self.options = { 'blksize': DEF_BLKSIZE }
+ self.state.state = 'ack'
+
expected_block = curblock + 1
if expected_block > 65535:
logger.debug("block number rollover to 0 again")