diff options
author | Michael P. Soulier <msoulier@digitaltorque.ca> | 2009-10-24 00:13:23 -0400 |
---|---|---|
committer | Michael P. Soulier <msoulier@digitaltorque.ca> | 2009-10-24 00:13:23 -0400 |
commit | badf18f2a4ffd7fa31f73767a8898bfc809b7e5e (patch) | |
tree | 21e938ae46f37a8c68dc0c2613f073943a9c1fa0 | |
parent | a80639c7e2b23476162bcee716be73062543ddf1 (diff) | |
download | tftpy-badf18f2a4ffd7fa31f73767a8898bfc809b7e5e.tar.gz |
Updated epydoc output for website.
64 files changed, 16319 insertions, 6 deletions
@@ -1,7 +1,7 @@ PY=/usr/bin/env python PYTHONPATH=. -all: test sdist tftpy-doc.tar.gz +all: test sdist sdist: PYTHONPATH=$(PYTHONPATH) $(PY) setup.py sdist @@ -9,14 +9,13 @@ sdist: test: PYTHONPATH=$(PYTHONPATH) $(PY) t/test.py +doc: apidocs + apidocs: tftpy-doc tftpy-doc: - PYTHONPATH=$(PYTHONPATH) epydoc --html -o tftpy-doc tftpy - -tftpy-doc.tar.gz: tftpy-doc - -mkdir dist - tar -zcvf dist/tftpy-doc.tar.gz tftpy-doc + rm -rf html/tftpy-doc + PYTHONPATH=$(PYTHONPATH) epydoc --html -o html/tftpy-doc tftpy clean: rm -rf dist src tftpy-doc* MANIFEST diff --git a/html/index.html b/html/index.html index 95d2654..c5963b2 100644 --- a/html/index.html +++ b/html/index.html @@ -19,6 +19,7 @@ <li><a href="#plans">Future Plans</a></li> <li><a href="#code">The Code</a></li> <li><a href="#support">Support</a></li> + <li><a href="#doc">Documentation</a></li> </ul> </div> <div class="content"> @@ -116,6 +117,12 @@ me</a> with any questions, or contact me through github. I'm also "msoulier" in <a href="http://identi.ca">identi.ca</a>.</p> + <a name="doc" /> + <h2>Documentation</h2> + <p>For now, all I have is the + <a href="tftpy-doc/index.html">API docs</a>. I'll have to work up a + tutorial and a manual at some point.</p> + <hr /> <p>Last updated: April 8, 2009.</p> diff --git a/html/tftpy-doc/api-objects.txt b/html/tftpy-doc/api-objects.txt new file mode 100644 index 0000000..30745e5 --- /dev/null +++ b/html/tftpy-doc/api-objects.txt @@ -0,0 +1,272 @@ +tftpy tftpy-module.html +tftpy.verlist tftpy-module.html#verlist +tftpy.TftpClient' tftpy.TftpClient%27-module.html +tftpy.TftpClient'.MAX_BLKSIZE tftpy.TftpClient%27-module.html#MAX_BLKSIZE +tftpy.TftpClient'.TIMEOUT_RETRIES tftpy.TftpClient%27-module.html#TIMEOUT_RETRIES +tftpy.TftpClient'.LOG_LEVEL tftpy.TftpClient%27-module.html#LOG_LEVEL +tftpy.TftpClient'.log tftpy.TftpClient%27-module.html#log +tftpy.TftpClient'.DEF_TFTP_PORT tftpy.TftpClient%27-module.html#DEF_TFTP_PORT +tftpy.TftpClient'.MAX_DUPS tftpy.TftpClient%27-module.html#MAX_DUPS +tftpy.TftpClient'.MIN_BLKSIZE tftpy.TftpClient%27-module.html#MIN_BLKSIZE +tftpy.TftpClient'.SOCK_TIMEOUT tftpy.TftpClient%27-module.html#SOCK_TIMEOUT +tftpy.TftpClient'.DEF_BLKSIZE tftpy.TftpClient%27-module.html#DEF_BLKSIZE +tftpy.TftpPacketFactory' tftpy.TftpPacketFactory%27-module.html +tftpy.TftpPacketFactory'.MAX_BLKSIZE tftpy.TftpPacketFactory%27-module.html#MAX_BLKSIZE +tftpy.TftpPacketFactory'.MAX_DUPS tftpy.TftpPacketFactory%27-module.html#MAX_DUPS +tftpy.TftpPacketFactory'.TIMEOUT_RETRIES tftpy.TftpPacketFactory%27-module.html#TIMEOUT_RETRIES +tftpy.TftpPacketFactory'.LOG_LEVEL tftpy.TftpPacketFactory%27-module.html#LOG_LEVEL +tftpy.TftpPacketFactory'.log tftpy.TftpPacketFactory%27-module.html#log +tftpy.TftpPacketFactory'.DEF_TFTP_PORT tftpy.TftpPacketFactory%27-module.html#DEF_TFTP_PORT +tftpy.TftpPacketFactory'.MIN_BLKSIZE tftpy.TftpPacketFactory%27-module.html#MIN_BLKSIZE +tftpy.TftpPacketFactory'.SOCK_TIMEOUT tftpy.TftpPacketFactory%27-module.html#SOCK_TIMEOUT +tftpy.TftpPacketFactory'.DEF_BLKSIZE tftpy.TftpPacketFactory%27-module.html#DEF_BLKSIZE +tftpy.TftpPacketTypes tftpy.TftpPacketTypes-module.html +tftpy.TftpPacketTypes.tftpassert tftpy.TftpShared-module.html#tftpassert +tftpy.TftpPacketTypes.setLogLevel tftpy.TftpShared-module.html#setLogLevel +tftpy.TftpServer' tftpy.TftpServer%27-module.html +tftpy.TftpServer'.MAX_BLKSIZE tftpy.TftpServer%27-module.html#MAX_BLKSIZE +tftpy.TftpServer'.TIMEOUT_RETRIES tftpy.TftpServer%27-module.html#TIMEOUT_RETRIES +tftpy.TftpServer'.LOG_LEVEL tftpy.TftpServer%27-module.html#LOG_LEVEL +tftpy.TftpServer'.log tftpy.TftpServer%27-module.html#log +tftpy.TftpServer'.DEF_TFTP_PORT tftpy.TftpServer%27-module.html#DEF_TFTP_PORT +tftpy.TftpServer'.MAX_DUPS tftpy.TftpServer%27-module.html#MAX_DUPS +tftpy.TftpServer'.MIN_BLKSIZE tftpy.TftpServer%27-module.html#MIN_BLKSIZE +tftpy.TftpServer'.SOCK_TIMEOUT tftpy.TftpServer%27-module.html#SOCK_TIMEOUT +tftpy.TftpServer'.DEF_BLKSIZE tftpy.TftpServer%27-module.html#DEF_BLKSIZE +tftpy.TftpShared tftpy.TftpShared-module.html +tftpy.TftpShared.DEF_BLKSIZE tftpy.TftpShared-module.html#DEF_BLKSIZE +tftpy.TftpShared.MAX_BLKSIZE tftpy.TftpShared-module.html#MAX_BLKSIZE +tftpy.TftpShared.setLogLevel tftpy.TftpShared-module.html#setLogLevel +tftpy.TftpShared.MIN_BLKSIZE tftpy.TftpShared-module.html#MIN_BLKSIZE +tftpy.TftpShared.log tftpy.TftpShared-module.html#log +tftpy.TftpShared.tftpassert tftpy.TftpShared-module.html#tftpassert +tftpy.TftpShared.MAX_DUPS tftpy.TftpShared-module.html#MAX_DUPS +tftpy.TftpShared.TIMEOUT_RETRIES tftpy.TftpShared-module.html#TIMEOUT_RETRIES +tftpy.TftpShared.SOCK_TIMEOUT tftpy.TftpShared-module.html#SOCK_TIMEOUT +tftpy.TftpShared.LOG_LEVEL tftpy.TftpShared-module.html#LOG_LEVEL +tftpy.TftpShared.DEF_TFTP_PORT tftpy.TftpShared-module.html#DEF_TFTP_PORT +tftpy.TftpStates tftpy.TftpStates-module.html +tftpy.TftpClient'.TftpClient tftpy.TftpClient%27.TftpClient-class.html +tftpy.TftpClient'.TftpClient.upload tftpy.TftpClient%27.TftpClient-class.html#upload +tftpy.TftpClient'.TftpClient.download tftpy.TftpClient%27.TftpClient-class.html#download +tftpy.TftpClient'.TftpClient.__init__ tftpy.TftpClient%27.TftpClient-class.html#__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html +tftpy.TftpPacketFactory'.TftpPacketFactory.parse tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#parse +tftpy.TftpPacketFactory'.TftpPacketFactory.__create tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#__create +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#__init__ +tftpy.TftpPacketTypes.TftpPacket tftpy.TftpPacketTypes.TftpPacket-class.html +tftpy.TftpPacketTypes.TftpPacket.decode tftpy.TftpPacketTypes.TftpPacket-class.html#decode +tftpy.TftpPacketTypes.TftpPacket.encode tftpy.TftpPacketTypes.TftpPacket-class.html#encode +tftpy.TftpPacketTypes.TftpPacket.__init__ tftpy.TftpPacketTypes.TftpPacket-class.html#__init__ +tftpy.TftpPacketTypes.TftpPacketACK tftpy.TftpPacketTypes.TftpPacketACK-class.html +tftpy.TftpPacketTypes.TftpPacketACK.__str__ tftpy.TftpPacketTypes.TftpPacketACK-class.html#__str__ +tftpy.TftpPacketTypes.TftpPacketACK.decode tftpy.TftpPacketTypes.TftpPacketACK-class.html#decode +tftpy.TftpPacketTypes.TftpPacketACK.encode tftpy.TftpPacketTypes.TftpPacketACK-class.html#encode +tftpy.TftpPacketTypes.TftpPacketACK.__init__ tftpy.TftpPacketTypes.TftpPacketACK-class.html#__init__ +tftpy.TftpPacketTypes.TftpPacketDAT tftpy.TftpPacketTypes.TftpPacketDAT-class.html +tftpy.TftpPacketTypes.TftpPacketDAT.__str__ tftpy.TftpPacketTypes.TftpPacketDAT-class.html#__str__ +tftpy.TftpPacketTypes.TftpPacketDAT.decode tftpy.TftpPacketTypes.TftpPacketDAT-class.html#decode +tftpy.TftpPacketTypes.TftpPacketDAT.encode tftpy.TftpPacketTypes.TftpPacketDAT-class.html#encode +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ tftpy.TftpPacketTypes.TftpPacketDAT-class.html#__init__ +tftpy.TftpPacketTypes.TftpPacketERR tftpy.TftpPacketTypes.TftpPacketERR-class.html +tftpy.TftpPacketTypes.TftpPacketERR.__str__ tftpy.TftpPacketTypes.TftpPacketERR-class.html#__str__ +tftpy.TftpPacketTypes.TftpPacketERR.decode tftpy.TftpPacketTypes.TftpPacketERR-class.html#decode +tftpy.TftpPacketTypes.TftpPacketERR.encode tftpy.TftpPacketTypes.TftpPacketERR-class.html#encode +tftpy.TftpPacketTypes.TftpPacketERR.__init__ tftpy.TftpPacketTypes.TftpPacketERR-class.html#__init__ +tftpy.TftpPacketTypes.TftpPacketInitial tftpy.TftpPacketTypes.TftpPacketInitial-class.html +tftpy.TftpPacketTypes.TftpPacketWithOptions.setoptions tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions +tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options +tftpy.TftpPacketTypes.TftpPacketInitial.decode tftpy.TftpPacketTypes.TftpPacketInitial-class.html#decode +tftpy.TftpPacketTypes.TftpPacketInitial.encode tftpy.TftpPacketTypes.TftpPacketInitial-class.html#encode +tftpy.TftpPacketTypes.TftpPacketWithOptions.getoptions tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions +tftpy.TftpPacketTypes.TftpPacketWithOptions.options tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ tftpy.TftpPacketTypes.TftpPacketInitial-class.html#__init__ +tftpy.TftpPacketTypes.TftpPacketOACK tftpy.TftpPacketTypes.TftpPacketOACK-class.html +tftpy.TftpPacketTypes.TftpPacketWithOptions.setoptions tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions +tftpy.TftpPacketTypes.TftpPacketOACK.__str__ tftpy.TftpPacketTypes.TftpPacketOACK-class.html#__str__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options +tftpy.TftpPacketTypes.TftpPacketOACK.decode tftpy.TftpPacketTypes.TftpPacketOACK-class.html#decode +tftpy.TftpPacketTypes.TftpPacketOACK.match_options tftpy.TftpPacketTypes.TftpPacketOACK-class.html#match_options +tftpy.TftpPacketTypes.TftpPacketOACK.encode tftpy.TftpPacketTypes.TftpPacketOACK-class.html#encode +tftpy.TftpPacketTypes.TftpPacketWithOptions.getoptions tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions +tftpy.TftpPacketTypes.TftpPacketWithOptions.options tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ tftpy.TftpPacketTypes.TftpPacketOACK-class.html#__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ tftpy.TftpPacketTypes.TftpPacketRRQ-class.html +tftpy.TftpPacketTypes.TftpPacketWithOptions.setoptions tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions +tftpy.TftpPacketTypes.TftpPacketRRQ.__str__ tftpy.TftpPacketTypes.TftpPacketRRQ-class.html#__str__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options +tftpy.TftpPacketTypes.TftpPacketInitial.decode tftpy.TftpPacketTypes.TftpPacketInitial-class.html#decode +tftpy.TftpPacketTypes.TftpPacketInitial.encode tftpy.TftpPacketTypes.TftpPacketInitial-class.html#encode +tftpy.TftpPacketTypes.TftpPacketWithOptions.getoptions tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions +tftpy.TftpPacketTypes.TftpPacketWithOptions.options tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ tftpy.TftpPacketTypes.TftpPacketRRQ-class.html#__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ tftpy.TftpPacketTypes.TftpPacketWRQ-class.html +tftpy.TftpPacketTypes.TftpPacketWithOptions.setoptions tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions +tftpy.TftpPacketTypes.TftpPacketWRQ.__str__ tftpy.TftpPacketTypes.TftpPacketWRQ-class.html#__str__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options +tftpy.TftpPacketTypes.TftpPacketInitial.decode tftpy.TftpPacketTypes.TftpPacketInitial-class.html#decode +tftpy.TftpPacketTypes.TftpPacketInitial.encode tftpy.TftpPacketTypes.TftpPacketInitial-class.html#encode +tftpy.TftpPacketTypes.TftpPacketWithOptions.getoptions tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions +tftpy.TftpPacketTypes.TftpPacketWithOptions.options tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ tftpy.TftpPacketTypes.TftpPacketWRQ-class.html#__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html +tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options +tftpy.TftpPacketTypes.TftpPacketWithOptions.setoptions tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions +tftpy.TftpPacketTypes.TftpPacketWithOptions.getoptions tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions +tftpy.TftpPacketTypes.TftpPacketWithOptions.options tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#__init__ +tftpy.TftpPacketTypes.TftpSession tftpy.TftpPacketTypes.TftpSession-class.html +tftpy.TftpServer'.TftpServer tftpy.TftpServer%27.TftpServer-class.html +tftpy.TftpServer'.TftpServer.__init__ tftpy.TftpServer%27.TftpServer-class.html#__init__ +tftpy.TftpServer'.TftpServer.listen tftpy.TftpServer%27.TftpServer-class.html#listen +tftpy.TftpShared.TftpErrors tftpy.TftpShared.TftpErrors-class.html +tftpy.TftpShared.TftpErrors.IllegalTftpOp tftpy.TftpShared.TftpErrors-class.html#IllegalTftpOp +tftpy.TftpShared.TftpErrors.DiskFull tftpy.TftpShared.TftpErrors-class.html#DiskFull +tftpy.TftpShared.TftpErrors.UnknownTID tftpy.TftpShared.TftpErrors-class.html#UnknownTID +tftpy.TftpShared.TftpErrors.FileAlreadyExists tftpy.TftpShared.TftpErrors-class.html#FileAlreadyExists +tftpy.TftpShared.TftpErrors.NoSuchUser tftpy.TftpShared.TftpErrors-class.html#NoSuchUser +tftpy.TftpShared.TftpErrors.FailedNegotiation tftpy.TftpShared.TftpErrors-class.html#FailedNegotiation +tftpy.TftpShared.TftpErrors.NotDefined tftpy.TftpShared.TftpErrors-class.html#NotDefined +tftpy.TftpShared.TftpErrors.AccessViolation tftpy.TftpShared.TftpErrors-class.html#AccessViolation +tftpy.TftpShared.TftpErrors.FileNotFound tftpy.TftpShared.TftpErrors-class.html#FileNotFound +tftpy.TftpShared.TftpException tftpy.TftpShared.TftpException-class.html +tftpy.TftpStates.TftpContext tftpy.TftpStates.TftpContext-class.html +tftpy.TftpStates.TftpContext.end tftpy.TftpStates.TftpContext-class.html#end +tftpy.TftpStates.TftpContext.checkTimeout tftpy.TftpStates.TftpContext-class.html#checkTimeout +tftpy.TftpStates.TftpContext.sethost tftpy.TftpStates.TftpContext-class.html#sethost +tftpy.TftpStates.TftpContext.setNextBlock tftpy.TftpStates.TftpContext-class.html#setNextBlock +tftpy.TftpStates.TftpContext.start tftpy.TftpStates.TftpContext-class.html#start +tftpy.TftpStates.TftpContext.host tftpy.TftpStates.TftpContext-class.html#host +tftpy.TftpStates.TftpContext.getNextBlock tftpy.TftpStates.TftpContext-class.html#getNextBlock +tftpy.TftpStates.TftpContext.cycle tftpy.TftpStates.TftpContext-class.html#cycle +tftpy.TftpStates.TftpContext.gethost tftpy.TftpStates.TftpContext-class.html#gethost +tftpy.TftpStates.TftpContext.__init__ tftpy.TftpStates.TftpContext-class.html#__init__ +tftpy.TftpStates.TftpContext.next_block tftpy.TftpStates.TftpContext-class.html#next_block +tftpy.TftpStates.TftpContextClientDownload tftpy.TftpStates.TftpContextClientDownload-class.html +tftpy.TftpStates.TftpContextClientDownload.end tftpy.TftpStates.TftpContextClientDownload-class.html#end +tftpy.TftpStates.TftpContext.checkTimeout tftpy.TftpStates.TftpContext-class.html#checkTimeout +tftpy.TftpStates.TftpContext.sethost tftpy.TftpStates.TftpContext-class.html#sethost +tftpy.TftpStates.TftpContext.setNextBlock tftpy.TftpStates.TftpContext-class.html#setNextBlock +tftpy.TftpStates.TftpContextClientDownload.start tftpy.TftpStates.TftpContextClientDownload-class.html#start +tftpy.TftpStates.TftpContext.host tftpy.TftpStates.TftpContext-class.html#host +tftpy.TftpStates.TftpContext.getNextBlock tftpy.TftpStates.TftpContext-class.html#getNextBlock +tftpy.TftpStates.TftpContext.next_block tftpy.TftpStates.TftpContext-class.html#next_block +tftpy.TftpStates.TftpContext.gethost tftpy.TftpStates.TftpContext-class.html#gethost +tftpy.TftpStates.TftpContextClientDownload.__init__ tftpy.TftpStates.TftpContextClientDownload-class.html#__init__ +tftpy.TftpStates.TftpContext.cycle tftpy.TftpStates.TftpContext-class.html#cycle +tftpy.TftpStates.TftpContextClientUpload tftpy.TftpStates.TftpContextClientUpload-class.html +tftpy.TftpStates.TftpContextClientUpload.end tftpy.TftpStates.TftpContextClientUpload-class.html#end +tftpy.TftpStates.TftpContext.checkTimeout tftpy.TftpStates.TftpContext-class.html#checkTimeout +tftpy.TftpStates.TftpContext.sethost tftpy.TftpStates.TftpContext-class.html#sethost +tftpy.TftpStates.TftpContext.setNextBlock tftpy.TftpStates.TftpContext-class.html#setNextBlock +tftpy.TftpStates.TftpContextClientUpload.start tftpy.TftpStates.TftpContextClientUpload-class.html#start +tftpy.TftpStates.TftpContext.host tftpy.TftpStates.TftpContext-class.html#host +tftpy.TftpStates.TftpContext.getNextBlock tftpy.TftpStates.TftpContext-class.html#getNextBlock +tftpy.TftpStates.TftpContext.next_block tftpy.TftpStates.TftpContext-class.html#next_block +tftpy.TftpStates.TftpContext.gethost tftpy.TftpStates.TftpContext-class.html#gethost +tftpy.TftpStates.TftpContextClientUpload.__init__ tftpy.TftpStates.TftpContextClientUpload-class.html#__init__ +tftpy.TftpStates.TftpContext.cycle tftpy.TftpStates.TftpContext-class.html#cycle +tftpy.TftpStates.TftpContextServer tftpy.TftpStates.TftpContextServer-class.html +tftpy.TftpStates.TftpContextServer.end tftpy.TftpStates.TftpContextServer-class.html#end +tftpy.TftpStates.TftpContext.checkTimeout tftpy.TftpStates.TftpContext-class.html#checkTimeout +tftpy.TftpStates.TftpContext.sethost tftpy.TftpStates.TftpContext-class.html#sethost +tftpy.TftpStates.TftpContext.setNextBlock tftpy.TftpStates.TftpContext-class.html#setNextBlock +tftpy.TftpStates.TftpContextServer.start tftpy.TftpStates.TftpContextServer-class.html#start +tftpy.TftpStates.TftpContext.host tftpy.TftpStates.TftpContext-class.html#host +tftpy.TftpStates.TftpContext.getNextBlock tftpy.TftpStates.TftpContext-class.html#getNextBlock +tftpy.TftpStates.TftpContext.next_block tftpy.TftpStates.TftpContext-class.html#next_block +tftpy.TftpStates.TftpContext.gethost tftpy.TftpStates.TftpContext-class.html#gethost +tftpy.TftpStates.TftpContextServer.__init__ tftpy.TftpStates.TftpContextServer-class.html#__init__ +tftpy.TftpStates.TftpContext.cycle tftpy.TftpStates.TftpContext-class.html#cycle +tftpy.TftpStates.TftpMetrics tftpy.TftpStates.TftpMetrics-class.html +tftpy.TftpStates.TftpMetrics.compute tftpy.TftpStates.TftpMetrics-class.html#compute +tftpy.TftpStates.TftpMetrics.add_dup tftpy.TftpStates.TftpMetrics-class.html#add_dup +tftpy.TftpStates.TftpMetrics.__init__ tftpy.TftpStates.TftpMetrics-class.html#__init__ +tftpy.TftpStates.TftpState tftpy.TftpStates.TftpState-class.html +tftpy.TftpStates.TftpState.sendError tftpy.TftpStates.TftpState-class.html#sendError +tftpy.TftpStates.TftpState.handle tftpy.TftpStates.TftpState-class.html#handle +tftpy.TftpStates.TftpState.handleOACK tftpy.TftpStates.TftpState-class.html#handleOACK +tftpy.TftpStates.TftpState.handleDat tftpy.TftpStates.TftpState-class.html#handleDat +tftpy.TftpStates.TftpState.serverInitial tftpy.TftpStates.TftpState-class.html#serverInitial +tftpy.TftpStates.TftpState.returnSupportedOptions tftpy.TftpStates.TftpState-class.html#returnSupportedOptions +tftpy.TftpStates.TftpState.sendDAT tftpy.TftpStates.TftpState-class.html#sendDAT +tftpy.TftpStates.TftpState.sendACK tftpy.TftpStates.TftpState-class.html#sendACK +tftpy.TftpStates.TftpState.sendOACK tftpy.TftpStates.TftpState-class.html#sendOACK +tftpy.TftpStates.TftpState.__init__ tftpy.TftpStates.TftpState-class.html#__init__ +tftpy.TftpStates.TftpStateExpectACK tftpy.TftpStates.TftpStateExpectACK-class.html +tftpy.TftpStates.TftpState.sendError tftpy.TftpStates.TftpState-class.html#sendError +tftpy.TftpStates.TftpStateExpectACK.handle tftpy.TftpStates.TftpStateExpectACK-class.html#handle +tftpy.TftpStates.TftpState.handleOACK tftpy.TftpStates.TftpState-class.html#handleOACK +tftpy.TftpStates.TftpState.handleDat tftpy.TftpStates.TftpState-class.html#handleDat +tftpy.TftpStates.TftpState.serverInitial tftpy.TftpStates.TftpState-class.html#serverInitial +tftpy.TftpStates.TftpState.returnSupportedOptions tftpy.TftpStates.TftpState-class.html#returnSupportedOptions +tftpy.TftpStates.TftpState.__init__ tftpy.TftpStates.TftpState-class.html#__init__ +tftpy.TftpStates.TftpState.sendACK tftpy.TftpStates.TftpState-class.html#sendACK +tftpy.TftpStates.TftpState.sendOACK tftpy.TftpStates.TftpState-class.html#sendOACK +tftpy.TftpStates.TftpState.sendDAT tftpy.TftpStates.TftpState-class.html#sendDAT +tftpy.TftpStates.TftpStateExpectDAT tftpy.TftpStates.TftpStateExpectDAT-class.html +tftpy.TftpStates.TftpState.sendError tftpy.TftpStates.TftpState-class.html#sendError +tftpy.TftpStates.TftpStateExpectDAT.handle tftpy.TftpStates.TftpStateExpectDAT-class.html#handle +tftpy.TftpStates.TftpState.handleOACK tftpy.TftpStates.TftpState-class.html#handleOACK +tftpy.TftpStates.TftpState.handleDat tftpy.TftpStates.TftpState-class.html#handleDat +tftpy.TftpStates.TftpState.serverInitial tftpy.TftpStates.TftpState-class.html#serverInitial +tftpy.TftpStates.TftpState.returnSupportedOptions tftpy.TftpStates.TftpState-class.html#returnSupportedOptions +tftpy.TftpStates.TftpState.__init__ tftpy.TftpStates.TftpState-class.html#__init__ +tftpy.TftpStates.TftpState.sendACK tftpy.TftpStates.TftpState-class.html#sendACK +tftpy.TftpStates.TftpState.sendOACK tftpy.TftpStates.TftpState-class.html#sendOACK +tftpy.TftpStates.TftpState.sendDAT tftpy.TftpStates.TftpState-class.html#sendDAT +tftpy.TftpStates.TftpStateSentRRQ tftpy.TftpStates.TftpStateSentRRQ-class.html +tftpy.TftpStates.TftpState.sendError tftpy.TftpStates.TftpState-class.html#sendError +tftpy.TftpStates.TftpStateSentRRQ.handle tftpy.TftpStates.TftpStateSentRRQ-class.html#handle +tftpy.TftpStates.TftpState.handleOACK tftpy.TftpStates.TftpState-class.html#handleOACK +tftpy.TftpStates.TftpState.handleDat tftpy.TftpStates.TftpState-class.html#handleDat +tftpy.TftpStates.TftpState.serverInitial tftpy.TftpStates.TftpState-class.html#serverInitial +tftpy.TftpStates.TftpState.returnSupportedOptions tftpy.TftpStates.TftpState-class.html#returnSupportedOptions +tftpy.TftpStates.TftpState.__init__ tftpy.TftpStates.TftpState-class.html#__init__ +tftpy.TftpStates.TftpState.sendACK tftpy.TftpStates.TftpState-class.html#sendACK +tftpy.TftpStates.TftpState.sendOACK tftpy.TftpStates.TftpState-class.html#sendOACK +tftpy.TftpStates.TftpState.sendDAT tftpy.TftpStates.TftpState-class.html#sendDAT +tftpy.TftpStates.TftpStateSentWRQ tftpy.TftpStates.TftpStateSentWRQ-class.html +tftpy.TftpStates.TftpState.sendError tftpy.TftpStates.TftpState-class.html#sendError +tftpy.TftpStates.TftpStateSentWRQ.handle tftpy.TftpStates.TftpStateSentWRQ-class.html#handle +tftpy.TftpStates.TftpState.handleOACK tftpy.TftpStates.TftpState-class.html#handleOACK +tftpy.TftpStates.TftpState.handleDat tftpy.TftpStates.TftpState-class.html#handleDat +tftpy.TftpStates.TftpState.serverInitial tftpy.TftpStates.TftpState-class.html#serverInitial +tftpy.TftpStates.TftpState.returnSupportedOptions tftpy.TftpStates.TftpState-class.html#returnSupportedOptions +tftpy.TftpStates.TftpState.__init__ tftpy.TftpStates.TftpState-class.html#__init__ +tftpy.TftpStates.TftpState.sendACK tftpy.TftpStates.TftpState-class.html#sendACK +tftpy.TftpStates.TftpState.sendOACK tftpy.TftpStates.TftpState-class.html#sendOACK +tftpy.TftpStates.TftpState.sendDAT tftpy.TftpStates.TftpState-class.html#sendDAT +tftpy.TftpStates.TftpStateServerRecvRRQ tftpy.TftpStates.TftpStateServerRecvRRQ-class.html +tftpy.TftpStates.TftpState.sendError tftpy.TftpStates.TftpState-class.html#sendError +tftpy.TftpStates.TftpStateServerRecvRRQ.handle tftpy.TftpStates.TftpStateServerRecvRRQ-class.html#handle +tftpy.TftpStates.TftpState.handleOACK tftpy.TftpStates.TftpState-class.html#handleOACK +tftpy.TftpStates.TftpState.handleDat tftpy.TftpStates.TftpState-class.html#handleDat +tftpy.TftpStates.TftpState.serverInitial tftpy.TftpStates.TftpState-class.html#serverInitial +tftpy.TftpStates.TftpState.returnSupportedOptions tftpy.TftpStates.TftpState-class.html#returnSupportedOptions +tftpy.TftpStates.TftpState.__init__ tftpy.TftpStates.TftpState-class.html#__init__ +tftpy.TftpStates.TftpState.sendACK tftpy.TftpStates.TftpState-class.html#sendACK +tftpy.TftpStates.TftpState.sendOACK tftpy.TftpStates.TftpState-class.html#sendOACK +tftpy.TftpStates.TftpState.sendDAT tftpy.TftpStates.TftpState-class.html#sendDAT +tftpy.TftpStates.TftpStateServerRecvWRQ tftpy.TftpStates.TftpStateServerRecvWRQ-class.html +tftpy.TftpStates.TftpState.sendError tftpy.TftpStates.TftpState-class.html#sendError +tftpy.TftpStates.TftpStateServerRecvWRQ.handle tftpy.TftpStates.TftpStateServerRecvWRQ-class.html#handle +tftpy.TftpStates.TftpState.handleOACK tftpy.TftpStates.TftpState-class.html#handleOACK +tftpy.TftpStates.TftpState.handleDat tftpy.TftpStates.TftpState-class.html#handleDat +tftpy.TftpStates.TftpState.serverInitial tftpy.TftpStates.TftpState-class.html#serverInitial +tftpy.TftpStates.TftpState.returnSupportedOptions tftpy.TftpStates.TftpState-class.html#returnSupportedOptions +tftpy.TftpStates.TftpState.__init__ tftpy.TftpStates.TftpState-class.html#__init__ +tftpy.TftpStates.TftpState.sendACK tftpy.TftpStates.TftpState-class.html#sendACK +tftpy.TftpStates.TftpState.sendOACK tftpy.TftpStates.TftpState-class.html#sendOACK +tftpy.TftpStates.TftpState.sendDAT tftpy.TftpStates.TftpState-class.html#sendDAT +tftpy.TftpStates.TftpStateServerStart tftpy.TftpStates.TftpStateServerStart-class.html +tftpy.TftpStates.TftpState.sendError tftpy.TftpStates.TftpState-class.html#sendError +tftpy.TftpStates.TftpStateServerStart.handle tftpy.TftpStates.TftpStateServerStart-class.html#handle +tftpy.TftpStates.TftpState.handleOACK tftpy.TftpStates.TftpState-class.html#handleOACK +tftpy.TftpStates.TftpState.handleDat tftpy.TftpStates.TftpState-class.html#handleDat +tftpy.TftpStates.TftpState.serverInitial tftpy.TftpStates.TftpState-class.html#serverInitial +tftpy.TftpStates.TftpState.returnSupportedOptions tftpy.TftpStates.TftpState-class.html#returnSupportedOptions +tftpy.TftpStates.TftpState.__init__ tftpy.TftpStates.TftpState-class.html#__init__ +tftpy.TftpStates.TftpState.sendACK tftpy.TftpStates.TftpState-class.html#sendACK +tftpy.TftpStates.TftpState.sendOACK tftpy.TftpStates.TftpState-class.html#sendOACK +tftpy.TftpStates.TftpState.sendDAT tftpy.TftpStates.TftpState-class.html#sendDAT diff --git a/html/tftpy-doc/class-tree.html b/html/tftpy-doc/class-tree.html new file mode 100644 index 0000000..c22662e --- /dev/null +++ b/html/tftpy-doc/class-tree.html @@ -0,0 +1,245 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>Class Hierarchy</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Trees </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="class-tree.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<center><b> + [ <a href="module-tree.html">Module Hierarchy</a> + | <a href="class-tree.html">Class Hierarchy</a> ] +</b></center><br /> +<h1 class="epydoc">Class Hierarchy</h1> +<ul class="nomargin-top"> + <li> <strong class="uidlink">object</strong>: + <em class="summary">The most base type</em> + <ul> + <li> <strong class="uidlink">exceptions.BaseException</strong>: + <em class="summary">Common base class for all exceptions</em> + <ul> + <li> <strong class="uidlink">exceptions.Exception</strong>: + <em class="summary">Common base class for all non-exit exceptions.</em> + <ul> + <li> <strong class="uidlink"><a href="tftpy.TftpShared.TftpException-class.html">tftpy.TftpShared.TftpException</a></strong>: + <em class="summary">This class is the parent class of all exceptions regarding the + handling of the TFTP protocol.</em> + </li> + </ul> + </li> + </ul> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpContext-class.html">tftpy.TftpStates.TftpContext</a></strong>: + <em class="summary">The base class of the contexts.</em> + <ul> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpContextClientDownload-class.html">tftpy.TftpStates.TftpContextClientDownload</a></strong>: + <em class="summary">The download context for the client during a download.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpContextClientUpload-class.html">tftpy.TftpStates.TftpContextClientUpload</a></strong>: + <em class="summary">The upload context for the client during an upload.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpContextServer-class.html">tftpy.TftpStates.TftpContextServer</a></strong>: + <em class="summary">The context for the server.</em> + </li> + </ul> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpShared.TftpErrors-class.html">tftpy.TftpShared.TftpErrors</a></strong>: + <em class="summary">This class is a convenience for defining the common tftp error + codes, and making them more readable in the code.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpMetrics-class.html">tftpy.TftpStates.TftpMetrics</a></strong>: + <em class="summary">A class representing metrics of the transfer.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacket-class.html">tftpy.TftpPacketTypes.TftpPacket</a></strong>: + <em class="summary">This class is the parent class of all tftp packet classes.</em> + <ul> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html">tftpy.TftpPacketTypes.TftpPacketACK</a></strong>: + <em class="summary">2 bytes 2 bytes...</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html">tftpy.TftpPacketTypes.TftpPacketDAT</a></strong>: + <em class="summary">2 bytes 2 bytes n bytes...</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html">tftpy.TftpPacketTypes.TftpPacketERR</a></strong>: + <em class="summary">2 bytes 2 bytes string 1 byte + ---------------------------------------- +ERROR | 05 | ErrorCode | ErrMsg | 0 | + ---------------------------------------- + Error Codes</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">tftpy.TftpPacketTypes.TftpPacketInitial</a></strong>: + <em class="summary">This class is a common parent class for the RRQ and WRQ packets, as + they share quite a bit of code.</em> + <ul> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html">tftpy.TftpPacketTypes.TftpPacketRRQ</a></strong>: + <em class="summary">2 bytes string 1 byte string 1 byte...</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html">tftpy.TftpPacketTypes.TftpPacketWRQ</a></strong>: + <em class="summary">2 bytes string 1 byte string 1 byte...</em> + </li> + </ul> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html">tftpy.TftpPacketTypes.TftpPacketOACK</a></strong>: + <em class="summary"># +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+ # + | opc | opt1 | 0 | value1 | 0 | optN | 0 | valueN | 0 | # + +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+</em> + </li> + </ul> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html">tftpy.TftpPacketFactory'.TftpPacketFactory</a></strong>: + <em class="summary">This class generates TftpPacket objects.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">tftpy.TftpPacketTypes.TftpPacketWithOptions</a></strong>: + <em class="summary">This class exists to permit some TftpPacket subclasses to share + code regarding options handling.</em> + <ul> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">tftpy.TftpPacketTypes.TftpPacketInitial</a></strong>: + <em class="summary">This class is a common parent class for the RRQ and WRQ packets, as + they share quite a bit of code.</em> + <ul> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html">tftpy.TftpPacketTypes.TftpPacketRRQ</a></strong>: + <em class="summary">2 bytes string 1 byte string 1 byte...</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html">tftpy.TftpPacketTypes.TftpPacketWRQ</a></strong>: + <em class="summary">2 bytes string 1 byte string 1 byte...</em> + </li> + </ul> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html">tftpy.TftpPacketTypes.TftpPacketOACK</a></strong>: + <em class="summary"># +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+ # + | opc | opt1 | 0 | value1 | 0 | optN | 0 | valueN | 0 | # + +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+</em> + </li> + </ul> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes.TftpSession-class.html">tftpy.TftpPacketTypes.TftpSession</a></strong>: + <em class="summary">This class is the base class for the tftp client and server.</em> + <ul> + <li> <strong class="uidlink"><a href="tftpy.TftpClient%27.TftpClient-class.html">tftpy.TftpClient'.TftpClient</a></strong>: + <em class="summary">This class is an implementation of a tftp client.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpServer%27.TftpServer-class.html">tftpy.TftpServer'.TftpServer</a></strong>: + <em class="summary">This class implements a tftp server object.</em> + </li> + </ul> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpState-class.html">tftpy.TftpStates.TftpState</a></strong>: + <em class="summary">The base class for the states.</em> + <ul> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpStateExpectACK-class.html">tftpy.TftpStates.TftpStateExpectACK</a></strong>: + <em class="summary">This class represents the state of the transfer when a DAT was just + sent, and we are waiting for an ACK from the server.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpStateExpectDAT-class.html">tftpy.TftpStates.TftpStateExpectDAT</a></strong>: + <em class="summary">Just sent an ACK packet.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpStateSentRRQ-class.html">tftpy.TftpStates.TftpStateSentRRQ</a></strong>: + <em class="summary">Just sent an RRQ packet.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpStateSentWRQ-class.html">tftpy.TftpStates.TftpStateSentWRQ</a></strong>: + <em class="summary">Just sent an WRQ packet for an upload.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html">tftpy.TftpStates.TftpStateServerRecvRRQ</a></strong>: + <em class="summary">This class represents the state of the TFTP server when it has just + received an RRQ packet.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html">tftpy.TftpStates.TftpStateServerRecvWRQ</a></strong>: + <em class="summary">This class represents the state of the TFTP server when it has just + received a WRQ packet.</em> + </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates.TftpStateServerStart-class.html">tftpy.TftpStates.TftpStateServerStart</a></strong>: + <em class="summary">The start state for the server.</em> + </li> + </ul> + </li> + </ul> + </li> +</ul> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Trees </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/crarr.png b/html/tftpy-doc/crarr.png Binary files differnew file mode 100644 index 0000000..26b43c5 --- /dev/null +++ b/html/tftpy-doc/crarr.png diff --git a/html/tftpy-doc/epydoc.css b/html/tftpy-doc/epydoc.css new file mode 100644 index 0000000..86d4170 --- /dev/null +++ b/html/tftpy-doc/epydoc.css @@ -0,0 +1,322 @@ + + +/* Epydoc CSS Stylesheet + * + * This stylesheet can be used to customize the appearance of epydoc's + * HTML output. + * + */ + +/* Default Colors & Styles + * - Set the default foreground & background color with 'body'; and + * link colors with 'a:link' and 'a:visited'. + * - Use bold for decision list terms. + * - The heading styles defined here are used for headings *within* + * docstring descriptions. All headings used by epydoc itself use + * either class='epydoc' or class='toc' (CSS styles for both + * defined below). + */ +body { background: #ffffff; color: #000000; } +p { margin-top: 0.5em; margin-bottom: 0.5em; } +a:link { color: #0000ff; } +a:visited { color: #204080; } +dt { font-weight: bold; } +h1 { font-size: +140%; font-style: italic; + font-weight: bold; } +h2 { font-size: +125%; font-style: italic; + font-weight: bold; } +h3 { font-size: +110%; font-style: italic; + font-weight: normal; } +code { font-size: 100%; } +/* N.B.: class, not pseudoclass */ +a.link { font-family: monospace; } + +/* Page Header & Footer + * - The standard page header consists of a navigation bar (with + * pointers to standard pages such as 'home' and 'trees'); a + * breadcrumbs list, which can be used to navigate to containing + * classes or modules; options links, to show/hide private + * variables and to show/hide frames; and a page title (using + * <h1>). The page title may be followed by a link to the + * corresponding source code (using 'span.codelink'). + * - The footer consists of a navigation bar, a timestamp, and a + * pointer to epydoc's homepage. + */ +h1.epydoc { margin: 0; font-size: +140%; font-weight: bold; } +h2.epydoc { font-size: +130%; font-weight: bold; } +h3.epydoc { font-size: +115%; font-weight: bold; + margin-top: 0.2em; } +td h3.epydoc { font-size: +115%; font-weight: bold; + margin-bottom: 0; } +table.navbar { background: #a0c0ff; color: #000000; + border: 2px groove #c0d0d0; } +table.navbar table { color: #000000; } +th.navbar-select { background: #70b0ff; + color: #000000; } +table.navbar a { text-decoration: none; } +table.navbar a:link { color: #0000ff; } +table.navbar a:visited { color: #204080; } +span.breadcrumbs { font-size: 85%; font-weight: bold; } +span.options { font-size: 70%; } +span.codelink { font-size: 85%; } +td.footer { font-size: 85%; } + +/* Table Headers + * - Each summary table and details section begins with a 'header' + * row. This row contains a section title (marked by + * 'span.table-header') as well as a show/hide private link + * (marked by 'span.options', defined above). + * - Summary tables that contain user-defined groups mark those + * groups using 'group header' rows. + */ +td.table-header { background: #70b0ff; color: #000000; + border: 1px solid #608090; } +td.table-header table { color: #000000; } +td.table-header table a:link { color: #0000ff; } +td.table-header table a:visited { color: #204080; } +span.table-header { font-size: 120%; font-weight: bold; } +th.group-header { background: #c0e0f8; color: #000000; + text-align: left; font-style: italic; + font-size: 115%; + border: 1px solid #608090; } + +/* Summary Tables (functions, variables, etc) + * - Each object is described by a single row of the table with + * two cells. The left cell gives the object's type, and is + * marked with 'code.summary-type'. The right cell gives the + * object's name and a summary description. + * - CSS styles for the table's header and group headers are + * defined above, under 'Table Headers' + */ +table.summary { border-collapse: collapse; + background: #e8f0f8; color: #000000; + border: 1px solid #608090; + margin-bottom: 0.5em; } +td.summary { border: 1px solid #608090; } +code.summary-type { font-size: 85%; } +table.summary a:link { color: #0000ff; } +table.summary a:visited { color: #204080; } + + +/* Details Tables (functions, variables, etc) + * - Each object is described in its own div. + * - A single-row summary table w/ table-header is used as + * a header for each details section (CSS style for table-header + * is defined above, under 'Table Headers'). + */ +table.details { border-collapse: collapse; + background: #e8f0f8; color: #000000; + border: 1px solid #608090; + margin: .2em 0 0 0; } +table.details table { color: #000000; } +table.details a:link { color: #0000ff; } +table.details a:visited { color: #204080; } + +/* Fields */ +dl.fields { margin-left: 2em; margin-top: 1em; + margin-bottom: 1em; } +dl.fields dd ul { margin-left: 0em; padding-left: 0em; } +dl.fields dd ul li ul { margin-left: 2em; padding-left: 0em; } +div.fields { margin-left: 2em; } +div.fields p { margin-bottom: 0.5em; } + +/* Index tables (identifier index, term index, etc) + * - link-index is used for indices containing lists of links + * (namely, the identifier index & term index). + * - index-where is used in link indices for the text indicating + * the container/source for each link. + * - metadata-index is used for indices containing metadata + * extracted from fields (namely, the bug index & todo index). + */ +table.link-index { border-collapse: collapse; + background: #e8f0f8; color: #000000; + border: 1px solid #608090; } +td.link-index { border-width: 0px; } +table.link-index a:link { color: #0000ff; } +table.link-index a:visited { color: #204080; } +span.index-where { font-size: 70%; } +table.metadata-index { border-collapse: collapse; + background: #e8f0f8; color: #000000; + border: 1px solid #608090; + margin: .2em 0 0 0; } +td.metadata-index { border-width: 1px; border-style: solid; } +table.metadata-index a:link { color: #0000ff; } +table.metadata-index a:visited { color: #204080; } + +/* Function signatures + * - sig* is used for the signature in the details section. + * - .summary-sig* is used for the signature in the summary + * table, and when listing property accessor functions. + * */ +.sig-name { color: #006080; } +.sig-arg { color: #008060; } +.sig-default { color: #602000; } +.summary-sig { font-family: monospace; } +.summary-sig-name { color: #006080; font-weight: bold; } +table.summary a.summary-sig-name:link + { color: #006080; font-weight: bold; } +table.summary a.summary-sig-name:visited + { color: #006080; font-weight: bold; } +.summary-sig-arg { color: #006040; } +.summary-sig-default { color: #501800; } + +/* Subclass list + */ +ul.subclass-list { display: inline; } +ul.subclass-list li { display: inline; } + +/* To render variables, classes etc. like functions */ +table.summary .summary-name { color: #006080; font-weight: bold; + font-family: monospace; } +table.summary + a.summary-name:link { color: #006080; font-weight: bold; + font-family: monospace; } +table.summary + a.summary-name:visited { color: #006080; font-weight: bold; + font-family: monospace; } + +/* Variable values + * - In the 'variable details' sections, each varaible's value is + * listed in a 'pre.variable' box. The width of this box is + * restricted to 80 chars; if the value's repr is longer than + * this it will be wrapped, using a backslash marked with + * class 'variable-linewrap'. If the value's repr is longer + * than 3 lines, the rest will be ellided; and an ellipsis + * marker ('...' marked with 'variable-ellipsis') will be used. + * - If the value is a string, its quote marks will be marked + * with 'variable-quote'. + * - If the variable is a regexp, it is syntax-highlighted using + * the re* CSS classes. + */ +pre.variable { padding: .5em; margin: 0; + background: #dce4ec; color: #000000; + border: 1px solid #708890; } +.variable-linewrap { color: #604000; font-weight: bold; } +.variable-ellipsis { color: #604000; font-weight: bold; } +.variable-quote { color: #604000; font-weight: bold; } +.variable-group { color: #008000; font-weight: bold; } +.variable-op { color: #604000; font-weight: bold; } +.variable-string { color: #006030; } +.variable-unknown { color: #a00000; font-weight: bold; } +.re { color: #000000; } +.re-char { color: #006030; } +.re-op { color: #600000; } +.re-group { color: #003060; } +.re-ref { color: #404040; } + +/* Base tree + * - Used by class pages to display the base class hierarchy. + */ +pre.base-tree { font-size: 80%; margin: 0; } + +/* Frames-based table of contents headers + * - Consists of two frames: one for selecting modules; and + * the other listing the contents of the selected module. + * - h1.toc is used for each frame's heading + * - h2.toc is used for subheadings within each frame. + */ +h1.toc { text-align: center; font-size: 105%; + margin: 0; font-weight: bold; + padding: 0; } +h2.toc { font-size: 100%; font-weight: bold; + margin: 0.5em 0 0 -0.3em; } + +/* Syntax Highlighting for Source Code + * - doctest examples are displayed in a 'pre.py-doctest' block. + * If the example is in a details table entry, then it will use + * the colors specified by the 'table pre.py-doctest' line. + * - Source code listings are displayed in a 'pre.py-src' block. + * Each line is marked with 'span.py-line' (used to draw a line + * down the left margin, separating the code from the line + * numbers). Line numbers are displayed with 'span.py-lineno'. + * The expand/collapse block toggle button is displayed with + * 'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not + * modify the font size of the text.) + * - If a source code page is opened with an anchor, then the + * corresponding code block will be highlighted. The code + * block's header is highlighted with 'py-highlight-hdr'; and + * the code block's body is highlighted with 'py-highlight'. + * - The remaining py-* classes are used to perform syntax + * highlighting (py-string for string literals, py-name for names, + * etc.) + */ +pre.py-doctest { padding: .5em; margin: 1em; + background: #e8f0f8; color: #000000; + border: 1px solid #708890; } +table pre.py-doctest { background: #dce4ec; + color: #000000; } +pre.py-src { border: 2px solid #000000; + background: #f0f0f0; color: #000000; } +.py-line { border-left: 2px solid #000000; + margin-left: .2em; padding-left: .4em; } +.py-lineno { font-style: italic; font-size: 90%; + padding-left: .5em; } +a.py-toggle { text-decoration: none; } +div.py-highlight-hdr { border-top: 2px solid #000000; + border-bottom: 2px solid #000000; + background: #d8e8e8; } +div.py-highlight { border-bottom: 2px solid #000000; + background: #d0e0e0; } +.py-prompt { color: #005050; font-weight: bold;} +.py-more { color: #005050; font-weight: bold;} +.py-string { color: #006030; } +.py-comment { color: #003060; } +.py-keyword { color: #600000; } +.py-output { color: #404040; } +.py-name { color: #000050; } +.py-name:link { color: #000050 !important; } +.py-name:visited { color: #000050 !important; } +.py-number { color: #005000; } +.py-defname { color: #000060; font-weight: bold; } +.py-def-name { color: #000060; font-weight: bold; } +.py-base-class { color: #000060; } +.py-param { color: #000060; } +.py-docstring { color: #006030; } +.py-decorator { color: #804020; } +/* Use this if you don't want links to names underlined: */ +/*a.py-name { text-decoration: none; }*/ + +/* Graphs & Diagrams + * - These CSS styles are used for graphs & diagrams generated using + * Graphviz dot. 'img.graph-without-title' is used for bare + * diagrams (to remove the border created by making the image + * clickable). + */ +img.graph-without-title { border: none; } +img.graph-with-title { border: 1px solid #000000; } +span.graph-title { font-weight: bold; } +span.graph-caption { } + +/* General-purpose classes + * - 'p.indent-wrapped-lines' defines a paragraph whose first line + * is not indented, but whose subsequent lines are. + * - The 'nomargin-top' class is used to remove the top margin (e.g. + * from lists). The 'nomargin' class is used to remove both the + * top and bottom margin (but not the left or right margin -- + * for lists, that would cause the bullets to disappear.) + */ +p.indent-wrapped-lines { padding: 0 0 0 7em; text-indent: -7em; + margin: 0; } +.nomargin-top { margin-top: 0; } +.nomargin { margin-top: 0; margin-bottom: 0; } + +/* HTML Log */ +div.log-block { padding: 0; margin: .5em 0 .5em 0; + background: #e8f0f8; color: #000000; + border: 1px solid #000000; } +div.log-error { padding: .1em .3em .1em .3em; margin: 4px; + background: #ffb0b0; color: #000000; + border: 1px solid #000000; } +div.log-warning { padding: .1em .3em .1em .3em; margin: 4px; + background: #ffffb0; color: #000000; + border: 1px solid #000000; } +div.log-info { padding: .1em .3em .1em .3em; margin: 4px; + background: #b0ffb0; color: #000000; + border: 1px solid #000000; } +h2.log-hdr { background: #70b0ff; color: #000000; + margin: 0; padding: 0em 0.5em 0em 0.5em; + border-bottom: 1px solid #000000; font-size: 110%; } +p.log { font-weight: bold; margin: .5em 0 .5em 0; } +tr.opt-changed { color: #000000; font-weight: bold; } +tr.opt-default { color: #606060; } +pre.log { margin: 0; padding: 0; padding-left: 1em; } diff --git a/html/tftpy-doc/epydoc.js b/html/tftpy-doc/epydoc.js new file mode 100644 index 0000000..e787dbc --- /dev/null +++ b/html/tftpy-doc/epydoc.js @@ -0,0 +1,293 @@ +function toggle_private() { + // Search for any private/public links on this page. Store + // their old text in "cmd," so we will know what action to + // take; and change their text to the opposite action. + var cmd = "?"; + var elts = document.getElementsByTagName("a"); + for(var i=0; i<elts.length; i++) { + if (elts[i].className == "privatelink") { + cmd = elts[i].innerHTML; + elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")? + "hide private":"show private"); + } + } + // Update all DIVs containing private objects. + var elts = document.getElementsByTagName("div"); + for(var i=0; i<elts.length; i++) { + if (elts[i].className == "private") { + elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block"); + } + else if (elts[i].className == "public") { + elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none"); + } + } + // Update all table rows containing private objects. Note, we + // use "" instead of "block" becaue IE & firefox disagree on what + // this should be (block vs table-row), and "" just gives the + // default for both browsers. + var elts = document.getElementsByTagName("tr"); + for(var i=0; i<elts.length; i++) { + if (elts[i].className == "private") { + elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":""); + } + } + // Update all list items containing private objects. + var elts = document.getElementsByTagName("li"); + for(var i=0; i<elts.length; i++) { + if (elts[i].className == "private") { + elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")? + "none":""); + } + } + // Update all list items containing private objects. + var elts = document.getElementsByTagName("ul"); + for(var i=0; i<elts.length; i++) { + if (elts[i].className == "private") { + elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block"); + } + } + // Set a cookie to remember the current option. + document.cookie = "EpydocPrivate="+cmd; + } +function show_private() { + var elts = document.getElementsByTagName("a"); + for(var i=0; i<elts.length; i++) { + if (elts[i].className == "privatelink") { + cmd = elts[i].innerHTML; + if (cmd && cmd.substr(0,4)=="show") + toggle_private(); + } + } + } +function getCookie(name) { + var dc = document.cookie; + var prefix = name + "="; + var begin = dc.indexOf("; " + prefix); + if (begin == -1) { + begin = dc.indexOf(prefix); + if (begin != 0) return null; + } else + { begin += 2; } + var end = document.cookie.indexOf(";", begin); + if (end == -1) + { end = dc.length; } + return unescape(dc.substring(begin + prefix.length, end)); + } +function setFrame(url1, url2) { + parent.frames[1].location.href = url1; + parent.frames[2].location.href = url2; + } +function checkCookie() { + var cmd=getCookie("EpydocPrivate"); + if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0) + toggle_private(); + } +function toggleCallGraph(id) { + var elt = document.getElementById(id); + if (elt.style.display == "none") + elt.style.display = "block"; + else + elt.style.display = "none"; + } +function expand(id) { + var elt = document.getElementById(id+"-expanded"); + if (elt) elt.style.display = "block"; + var elt = document.getElementById(id+"-expanded-linenums"); + if (elt) elt.style.display = "block"; + var elt = document.getElementById(id+"-collapsed"); + if (elt) { elt.innerHTML = ""; elt.style.display = "none"; } + var elt = document.getElementById(id+"-collapsed-linenums"); + if (elt) { elt.innerHTML = ""; elt.style.display = "none"; } + var elt = document.getElementById(id+"-toggle"); + if (elt) { elt.innerHTML = "-"; } +} + +function collapse(id) { + var elt = document.getElementById(id+"-expanded"); + if (elt) elt.style.display = "none"; + var elt = document.getElementById(id+"-expanded-linenums"); + if (elt) elt.style.display = "none"; + var elt = document.getElementById(id+"-collapsed-linenums"); + if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; } + var elt = document.getElementById(id+"-toggle"); + if (elt) { elt.innerHTML = "+"; } + var elt = document.getElementById(id+"-collapsed"); + if (elt) { + elt.style.display = "block"; + + var indent = elt.getAttribute("indent"); + var pad = elt.getAttribute("pad"); + var s = "<tt class='py-lineno'>"; + for (var i=0; i<pad.length; i++) { s += " " } + s += "</tt>"; + s += " <tt class='py-line'>"; + for (var i=0; i<indent.length; i++) { s += " " } + s += "<a href='#' onclick='expand(\"" + id; + s += "\");return false'>...</a></tt><br />"; + elt.innerHTML = s; + } +} + +function toggle(id) { + elt = document.getElementById(id+"-toggle"); + if (elt.innerHTML == "-") + collapse(id); + else + expand(id); + return false; +} + +function highlight(id) { + var elt = document.getElementById(id+"-def"); + if (elt) elt.className = "py-highlight-hdr"; + var elt = document.getElementById(id+"-expanded"); + if (elt) elt.className = "py-highlight"; + var elt = document.getElementById(id+"-collapsed"); + if (elt) elt.className = "py-highlight"; +} + +function num_lines(s) { + var n = 1; + var pos = s.indexOf("\n"); + while ( pos > 0) { + n += 1; + pos = s.indexOf("\n", pos+1); + } + return n; +} + +// Collapse all blocks that mave more than `min_lines` lines. +function collapse_all(min_lines) { + var elts = document.getElementsByTagName("div"); + for (var i=0; i<elts.length; i++) { + var elt = elts[i]; + var split = elt.id.indexOf("-"); + if (split > 0) + if (elt.id.substring(split, elt.id.length) == "-expanded") + if (num_lines(elt.innerHTML) > min_lines) + collapse(elt.id.substring(0, split)); + } +} + +function expandto(href) { + var start = href.indexOf("#")+1; + if (start != 0 && start != href.length) { + if (href.substring(start, href.length) != "-") { + collapse_all(4); + pos = href.indexOf(".", start); + while (pos != -1) { + var id = href.substring(start, pos); + expand(id); + pos = href.indexOf(".", pos+1); + } + var id = href.substring(start, href.length); + expand(id); + highlight(id); + } + } +} + +function kill_doclink(id) { + var parent = document.getElementById(id); + parent.removeChild(parent.childNodes.item(0)); +} +function auto_kill_doclink(ev) { + if (!ev) var ev = window.event; + if (!this.contains(ev.toElement)) { + var parent = document.getElementById(this.parentID); + parent.removeChild(parent.childNodes.item(0)); + } +} + +function doclink(id, name, targets_id) { + var elt = document.getElementById(id); + + // If we already opened the box, then destroy it. + // (This case should never occur, but leave it in just in case.) + if (elt.childNodes.length > 1) { + elt.removeChild(elt.childNodes.item(0)); + } + else { + // The outer box: relative + inline positioning. + var box1 = document.createElement("div"); + box1.style.position = "relative"; + box1.style.display = "inline"; + box1.style.top = 0; + box1.style.left = 0; + + // A shadow for fun + var shadow = document.createElement("div"); + shadow.style.position = "absolute"; + shadow.style.left = "-1.3em"; + shadow.style.top = "-1.3em"; + shadow.style.background = "#404040"; + + // The inner box: absolute positioning. + var box2 = document.createElement("div"); + box2.style.position = "relative"; + box2.style.border = "1px solid #a0a0a0"; + box2.style.left = "-.2em"; + box2.style.top = "-.2em"; + box2.style.background = "white"; + box2.style.padding = ".3em .4em .3em .4em"; + box2.style.fontStyle = "normal"; + box2.onmouseout=auto_kill_doclink; + box2.parentID = id; + + // Get the targets + var targets_elt = document.getElementById(targets_id); + var targets = targets_elt.getAttribute("targets"); + var links = ""; + target_list = targets.split(","); + for (var i=0; i<target_list.length; i++) { + var target = target_list[i].split("="); + links += "<li><a href='" + target[1] + + "' style='text-decoration:none'>" + + target[0] + "</a></li>"; + } + + // Put it all together. + elt.insertBefore(box1, elt.childNodes.item(0)); + //box1.appendChild(box2); + box1.appendChild(shadow); + shadow.appendChild(box2); + box2.innerHTML = + "Which <b>"+name+"</b> do you want to see documentation for?" + + "<ul style='margin-bottom: 0;'>" + + links + + "<li><a href='#' style='text-decoration:none' " + + "onclick='kill_doclink(\""+id+"\");return false;'>"+ + "<i>None of the above</i></a></li></ul>"; + } + return false; +} + +function get_anchor() { + var href = location.href; + var start = href.indexOf("#")+1; + if ((start != 0) && (start != href.length)) + return href.substring(start, href.length); + } +function redirect_url(dottedName) { + // Scan through each element of the "pages" list, and check + // if "name" matches with any of them. + for (var i=0; i<pages.length; i++) { + + // Each page has the form "<pagename>-m" or "<pagename>-c"; + // extract the <pagename> portion & compare it to dottedName. + var pagename = pages[i].substring(0, pages[i].length-2); + if (pagename == dottedName.substring(0,pagename.length)) { + + // We've found a page that matches `dottedName`; + // construct its URL, using leftover `dottedName` + // content to form an anchor. + var pagetype = pages[i].charAt(pages[i].length-1); + var url = pagename + ((pagetype=="m")?"-module.html": + "-class.html"); + if (dottedName.length > pagename.length) + url += "#" + dottedName.substring(pagename.length+1, + dottedName.length); + return url; + } + } + } diff --git a/html/tftpy-doc/frames.html b/html/tftpy-doc/frames.html new file mode 100644 index 0000000..17cf982 --- /dev/null +++ b/html/tftpy-doc/frames.html @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" + "DTD/xhtml1-frameset.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title> API Documentation </title> +</head> +<frameset cols="20%,80%"> + <frameset rows="30%,70%"> + <frame src="toc.html" name="moduleListFrame" + id="moduleListFrame" /> + <frame src="toc-everything.html" name="moduleFrame" + id="moduleFrame" /> + </frameset> + <frame src="tftpy-module.html" name="mainFrame" id="mainFrame" /> +</frameset> +</html> diff --git a/html/tftpy-doc/help.html b/html/tftpy-doc/help.html new file mode 100644 index 0000000..f073451 --- /dev/null +++ b/html/tftpy-doc/help.html @@ -0,0 +1,268 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>Help</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Help </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="help.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> + +<h1 class="epydoc"> API Documentation </h1> + +<p> This document contains the API (Application Programming Interface) +documentation for this project. Documentation for the Python +objects defined by the project is divided into separate pages for each +package, module, and class. The API documentation also includes two +pages containing information about the project as a whole: a trees +page, and an index page. </p> + +<h2> Object Documentation </h2> + + <p>Each <strong>Package Documentation</strong> page contains: </p> + <ul> + <li> A description of the package. </li> + <li> A list of the modules and sub-packages contained by the + package. </li> + <li> A summary of the classes defined by the package. </li> + <li> A summary of the functions defined by the package. </li> + <li> A summary of the variables defined by the package. </li> + <li> A detailed description of each function defined by the + package. </li> + <li> A detailed description of each variable defined by the + package. </li> + </ul> + + <p>Each <strong>Module Documentation</strong> page contains:</p> + <ul> + <li> A description of the module. </li> + <li> A summary of the classes defined by the module. </li> + <li> A summary of the functions defined by the module. </li> + <li> A summary of the variables defined by the module. </li> + <li> A detailed description of each function defined by the + module. </li> + <li> A detailed description of each variable defined by the + module. </li> + </ul> + + <p>Each <strong>Class Documentation</strong> page contains: </p> + <ul> + <li> A class inheritance diagram. </li> + <li> A list of known subclasses. </li> + <li> A description of the class. </li> + <li> A summary of the methods defined by the class. </li> + <li> A summary of the instance variables defined by the class. </li> + <li> A summary of the class (static) variables defined by the + class. </li> + <li> A detailed description of each method defined by the + class. </li> + <li> A detailed description of each instance variable defined by the + class. </li> + <li> A detailed description of each class (static) variable defined + by the class. </li> + </ul> + +<h2> Project Documentation </h2> + + <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p> + <ul> + <li> The <em>module hierarchy</em> lists every package and module, with + modules grouped into packages. At the top level, and within each + package, modules and sub-packages are listed alphabetically. </li> + <li> The <em>class hierarchy</em> lists every class, grouped by base + class. If a class has more than one base class, then it will be + listed under each base class. At the top level, and under each base + class, classes are listed alphabetically. </li> + </ul> + + <p> The <strong>Index</strong> page contains indices of terms and + identifiers: </p> + <ul> + <li> The <em>term index</em> lists every term indexed by any object's + documentation. For each term, the index provides links to each + place where the term is indexed. </li> + <li> The <em>identifier index</em> lists the (short) name of every package, + module, class, method, function, variable, and parameter. For each + identifier, the index provides a short description, and a link to + its documentation. </li> + </ul> + +<h2> The Table of Contents </h2> + +<p> The table of contents occupies the two frames on the left side of +the window. The upper-left frame displays the <em>project +contents</em>, and the lower-left frame displays the <em>module +contents</em>: </p> + +<table class="help summary" border="1" cellspacing="0" cellpadding="3"> + <tr style="height: 30%"> + <td align="center" style="font-size: small"> + Project<br />Contents<hr />...</td> + <td align="center" style="font-size: small" rowspan="2" width="70%"> + API<br />Documentation<br />Frame<br /><br /><br /> + </td> + </tr> + <tr> + <td align="center" style="font-size: small"> + Module<br />Contents<hr /> <br />...<br /> + </td> + </tr> +</table><br /> + +<p> The <strong>project contents frame</strong> contains a list of all packages +and modules that are defined by the project. Clicking on an entry +will display its contents in the module contents frame. Clicking on a +special entry, labeled "Everything," will display the contents of +the entire project. </p> + +<p> The <strong>module contents frame</strong> contains a list of every +submodule, class, type, exception, function, and variable defined by a +module or package. Clicking on an entry will display its +documentation in the API documentation frame. Clicking on the name of +the module, at the top of the frame, will display the documentation +for the module itself. </p> + +<p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top +navigation bar can be used to control whether the table of contents is +displayed or not. </p> + +<h2> The Navigation Bar </h2> + +<p> A navigation bar is located at the top and bottom of every page. +It indicates what type of page you are currently viewing, and allows +you to go to related pages. The following table describes the labels +on the navigation bar. Note that not some labels (such as +[Parent]) are not displayed on all pages. </p> + +<table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%"> +<tr class="summary"> + <th>Label</th> + <th>Highlighted when...</th> + <th>Links to...</th> +</tr> + <tr><td valign="top"><strong>[Parent]</strong></td> + <td valign="top"><em>(never highlighted)</em></td> + <td valign="top"> the parent of the current package </td></tr> + <tr><td valign="top"><strong>[Package]</strong></td> + <td valign="top">viewing a package</td> + <td valign="top">the package containing the current object + </td></tr> + <tr><td valign="top"><strong>[Module]</strong></td> + <td valign="top">viewing a module</td> + <td valign="top">the module containing the current object + </td></tr> + <tr><td valign="top"><strong>[Class]</strong></td> + <td valign="top">viewing a class </td> + <td valign="top">the class containing the current object</td></tr> + <tr><td valign="top"><strong>[Trees]</strong></td> + <td valign="top">viewing the trees page</td> + <td valign="top"> the trees page </td></tr> + <tr><td valign="top"><strong>[Index]</strong></td> + <td valign="top">viewing the index page</td> + <td valign="top"> the index page </td></tr> + <tr><td valign="top"><strong>[Help]</strong></td> + <td valign="top">viewing the help page</td> + <td valign="top"> the help page </td></tr> +</table> + +<p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below +the top navigation bar can be used to control whether documentation +for private objects is displayed. Private objects are usually defined +as objects whose (short) names begin with a single underscore, but do +not end with an underscore. For example, "<code>_x</code>", +"<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>" +are private objects; but "<code>re.sub</code>", +"<code>__init__</code>", and "<code>type_</code>" are not. However, +if a module defines the "<code>__all__</code>" variable, then its +contents are used to decide which objects are private. </p> + +<p> A timestamp below the bottom navigation bar indicates when each +page was last updated. </p> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Help </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/identifier-index.html b/html/tftpy-doc/identifier-index.html new file mode 100644 index 0000000..d7bc961 --- /dev/null +++ b/html/tftpy-doc/identifier-index.html @@ -0,0 +1,711 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>Identifier Index</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Indices </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="identifier-index.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<table border="0" width="100%"> +<tr valign="bottom"><td> +<h1 class="epydoc">Identifier Index</h1> +</td><td> +[ + <a href="#A">A</a> + B + <a href="#C">C</a> + <a href="#D">D</a> + <a href="#E">E</a> + <a href="#F">F</a> + <a href="#G">G</a> + <a href="#H">H</a> + <a href="#I">I</a> + J + K + <a href="#L">L</a> + <a href="#M">M</a> + <a href="#N">N</a> + <a href="#O">O</a> + <a href="#P">P</a> + Q + <a href="#R">R</a> + <a href="#S">S</a> + <a href="#T">T</a> + <a href="#U">U</a> + <a href="#V">V</a> + W + X + Y + Z + <a href="#_">_</a> +] +</td></table> +<table border="0" width="100%"> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="A">A</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpShared.TftpErrors-class.html#AccessViolation">AccessViolation</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared.TftpErrors-class.html">TftpErrors</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpMetrics-class.html#add_dup">add_dup()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpMetrics-class.html">TftpMetrics</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="C">C</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html#checkTimeout">checkTimeout()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpMetrics-class.html#compute">compute()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpMetrics-class.html">TftpMetrics</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html#cycle">cycle()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a>)</span></td> +</tr> +<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="D">D</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacket-class.html#decode">decode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options">decode_options()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27-module.html#DEF_TFTP_PORT">DEF_TFTP_PORT</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#decode">decode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html">TftpPacketACK</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27-module.html#DEF_BLKSIZE">DEF_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27-module.html#DEF_TFTP_PORT">DEF_TFTP_PORT</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#decode">decode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html">TftpPacketDAT</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27-module.html#DEF_BLKSIZE">DEF_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html#DEF_TFTP_PORT">DEF_TFTP_PORT</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#decode">decode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html">TftpPacketERR</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27-module.html#DEF_BLKSIZE">DEF_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared.TftpErrors-class.html#DiskFull">DiskFull</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared.TftpErrors-class.html">TftpErrors</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#decode">decode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">TftpPacketInitial</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html#DEF_BLKSIZE">DEF_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27.TftpClient-class.html#download">download()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27.TftpClient-class.html">TftpClient</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#decode">decode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html">TftpPacketOACK</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27-module.html#DEF_TFTP_PORT">DEF_TFTP_PORT</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="E">E</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacket-class.html#encode">encode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#encode">encode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">TftpPacketInitial</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextClientUpload-class.html#end">end()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContextClientUpload-class.html">TftpContextClientUpload</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#encode">encode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html">TftpPacketACK</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#encode">encode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html">TftpPacketOACK</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextServer-class.html#end">end()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContextServer-class.html">TftpContextServer</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#encode">encode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html">TftpPacketDAT</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html#end">end()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#encode">encode()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html">TftpPacketERR</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextClientDownload-class.html#end">end()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContextClientDownload-class.html">TftpContextClientDownload</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="F">F</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpShared.TftpErrors-class.html#FailedNegotiation">FailedNegotiation</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared.TftpErrors-class.html">TftpErrors</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared.TftpErrors-class.html#FileAlreadyExists">FileAlreadyExists</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared.TftpErrors-class.html">TftpErrors</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared.TftpErrors-class.html#FileNotFound">FileNotFound</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared.TftpErrors-class.html">TftpErrors</a>)</span></td> +</tr> +<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="G">G</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html#gethost">gethost()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html#getNextBlock">getNextBlock()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions">getoptions()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a>)</span></td> +</tr> +<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="H">H</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpState-class.html#handle">handle()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateSentWRQ-class.html#handle">handle()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpStateSentWRQ-class.html">TftpStateSentWRQ</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpState-class.html#handleDat">handleDat()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateExpectACK-class.html#handle">handle()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpStateExpectACK-class.html">TftpStateExpectACK</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html#handle">handle()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html">TftpStateServerRecvRRQ</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpState-class.html#handleOACK">handleOACK()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateExpectDAT-class.html#handle">handle()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpStateExpectDAT-class.html">TftpStateExpectDAT</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html#handle">handle()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html">TftpStateServerRecvWRQ</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html#host">host</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateSentRRQ-class.html#handle">handle()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpStateSentRRQ-class.html">TftpStateSentRRQ</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateServerStart-class.html#handle">handle()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpStateServerStart-class.html">TftpStateServerStart</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="I">I</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpShared.TftpErrors-class.html#IllegalTftpOp">IllegalTftpOp</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared.TftpErrors-class.html">TftpErrors</a>)</span></td> +<td width="33%" class="link-index"> </td> +<td width="33%" class="link-index"> </td> +</tr> +<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="L">L</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27.TftpServer-class.html#listen">listen()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27.TftpServer-class.html">TftpServer</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27-module.html#log">log</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27-module.html#LOG_LEVEL">LOG_LEVEL</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27-module.html#log">log</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html#log">log</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27-module.html#LOG_LEVEL">LOG_LEVEL</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27-module.html#log">log</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27-module.html#LOG_LEVEL">LOG_LEVEL</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html#LOG_LEVEL">LOG_LEVEL</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +</tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="M">M</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#match_options">match_options()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html">TftpPacketOACK</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27-module.html#MAX_DUPS">MAX_DUPS</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27-module.html#MIN_BLKSIZE">MIN_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27-module.html#MAX_BLKSIZE">MAX_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27-module.html#MAX_DUPS">MAX_DUPS</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27-module.html#MIN_BLKSIZE">MIN_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27-module.html#MAX_BLKSIZE">MAX_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27-module.html#MAX_DUPS">MAX_DUPS</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html#MIN_BLKSIZE">MIN_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27-module.html#MAX_BLKSIZE">MAX_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html#MAX_DUPS">MAX_DUPS</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html#MAX_BLKSIZE">MAX_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27-module.html#MIN_BLKSIZE">MIN_BLKSIZE</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="N">N</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html#next_block">next_block</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared.TftpErrors-class.html#NoSuchUser">NoSuchUser</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared.TftpErrors-class.html">TftpErrors</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared.TftpErrors-class.html#NotDefined">NotDefined</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared.TftpErrors-class.html">TftpErrors</a>)</span></td> +</tr> +<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="O">O</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options">options</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a>)</span></td> +<td width="33%" class="link-index"> </td> +<td width="33%" class="link-index"> </td> +</tr> +<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="P">P</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#parse">parse()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html">TftpPacketFactory</a>)</span></td> +<td width="33%" class="link-index"> </td> +<td width="33%" class="link-index"> </td> +</tr> +<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="R">R</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpState-class.html#returnSupportedOptions">returnSupportedOptions()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a>)</span></td> +<td width="33%" class="link-index"> </td> +<td width="33%" class="link-index"> </td> +</tr> +<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="S">S</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpState-class.html#sendACK">sendACK()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html#setLogLevel">setLogLevel()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html#SOCK_TIMEOUT">SOCK_TIMEOUT</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpState-class.html#sendDAT">sendDAT()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html#setNextBlock">setNextBlock()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html#start">start()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpState-class.html#sendError">sendError()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions">setoptions()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextClientDownload-class.html#start">start()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContextClientDownload-class.html">TftpContextClientDownload</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpState-class.html#sendOACK">sendOACK()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27-module.html#SOCK_TIMEOUT">SOCK_TIMEOUT</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextClientUpload-class.html#start">start()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContextClientUpload-class.html">TftpContextClientUpload</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpState-class.html#serverInitial">serverInitial()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27-module.html#SOCK_TIMEOUT">SOCK_TIMEOUT</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextServer-class.html#start">start()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContextServer-class.html">TftpContextServer</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html#sethost">sethost()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27-module.html#SOCK_TIMEOUT">SOCK_TIMEOUT</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="T">T</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html#tftpassert">tftpassert()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html">TftpPacketFactory</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateExpectDAT-class.html">TftpStateExpectDAT</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27.TftpClient-class.html">TftpClient</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27-module.html">TftpPacketFactory'</a><br /> +<span class="index-where">(in <a href="tftpy-module.html">tftpy</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates-module.html">TftpStates</a><br /> +<span class="index-where">(in <a href="tftpy-module.html">tftpy</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27-module.html">TftpClient'</a><br /> +<span class="index-where">(in <a href="tftpy-module.html">tftpy</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">TftpPacketInitial</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateSentRRQ-class.html">TftpStateSentRRQ</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html">TftpPacketOACK</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateSentWRQ-class.html">TftpStateSentWRQ</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextClientDownload-class.html">TftpContextClientDownload</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html">TftpPacketRRQ</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html">TftpStateServerRecvRRQ</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextClientUpload-class.html">TftpContextClientUpload</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes-module.html">TftpPacketTypes</a><br /> +<span class="index-where">(in <a href="tftpy-module.html">tftpy</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html">TftpStateServerRecvWRQ</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextServer-class.html">TftpContextServer</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateServerStart-class.html">TftpStateServerStart</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpShared.TftpErrors-class.html">TftpErrors</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html">TftpPacketWRQ</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy-module.html">tftpy</a></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpShared.TftpException-class.html">TftpException</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27.TftpServer-class.html">TftpServer</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27-module.html#TIMEOUT_RETRIES">TIMEOUT_RETRIES</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpMetrics-class.html">TftpMetrics</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27-module.html">TftpServer'</a><br /> +<span class="index-where">(in <a href="tftpy-module.html">tftpy</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27-module.html#TIMEOUT_RETRIES">TIMEOUT_RETRIES</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpSession-class.html">TftpSession</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27-module.html#TIMEOUT_RETRIES">TIMEOUT_RETRIES</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html">TftpPacketACK</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html">TftpShared</a><br /> +<span class="index-where">(in <a href="tftpy-module.html">tftpy</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpShared-module.html#TIMEOUT_RETRIES">TIMEOUT_RETRIES</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html">TftpPacketDAT</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpState-class.html">TftpState</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html">TftpPacketERR</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpStateExpectACK-class.html">TftpStateExpectACK</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="U">U</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpShared.TftpErrors-class.html#UnknownTID">UnknownTID</a><br /> +<span class="index-where">(in <a href="tftpy.TftpShared.TftpErrors-class.html">TftpErrors</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27.TftpClient-class.html#upload">upload()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27.TftpClient-class.html">TftpClient</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="V">V</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy-module.html#verlist">verlist</a><br /> +<span class="index-where">(in <a href="tftpy-module.html">tftpy</a>)</span></td> +<td width="33%" class="link-index"> </td> +<td width="33%" class="link-index"> </td> +</tr> +<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr> +</table> +</td></tr> +<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="_">_</a></h2></td> +<td valign="top"> +<table class="link-index" width="100%" border="1"> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#__create">__create()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html">TftpPacketFactory</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html">TftpPacketRRQ</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpState-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpClient%27.TftpClient-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpClient%27.TftpClient-class.html">TftpClient</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html">TftpPacketWRQ</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#__str__">__str__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html">TftpPacketACK</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html">TftpPacketFactory</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#__str__">__str__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html">TftpPacketDAT</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacket-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpServer%27.TftpServer-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpServer%27.TftpServer-class.html">TftpServer</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#__str__">__str__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html">TftpPacketERR</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html">TftpPacketACK</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContext-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#__str__">__str__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html">TftpPacketOACK</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html">TftpPacketDAT</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextClientDownload-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContextClientDownload-class.html">TftpContextClientDownload</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html#__str__">__str__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html">TftpPacketRRQ</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html">TftpPacketERR</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextClientUpload-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContextClientUpload-class.html">TftpContextClientUpload</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html#__str__">__str__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html">TftpPacketWRQ</a>)</span></td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">TftpPacketInitial</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpContextServer-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpContextServer-class.html">TftpContextServer</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +<tr> +<td width="33%" class="link-index"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html">TftpPacketOACK</a>)</span></td> +<td width="33%" class="link-index"><a href="tftpy.TftpStates.TftpMetrics-class.html#__init__">__init__()</a><br /> +<span class="index-where">(in <a href="tftpy.TftpStates.TftpMetrics-class.html">TftpMetrics</a>)</span></td> +<td width="33%" class="link-index"> </td> +</tr> +</table> +</td></tr> +</table> +<br /><br /><!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Indices </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/index.html b/html/tftpy-doc/index.html new file mode 100644 index 0000000..17cf982 --- /dev/null +++ b/html/tftpy-doc/index.html @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" + "DTD/xhtml1-frameset.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title> API Documentation </title> +</head> +<frameset cols="20%,80%"> + <frameset rows="30%,70%"> + <frame src="toc.html" name="moduleListFrame" + id="moduleListFrame" /> + <frame src="toc-everything.html" name="moduleFrame" + id="moduleFrame" /> + </frameset> + <frame src="tftpy-module.html" name="mainFrame" id="mainFrame" /> +</frameset> +</html> diff --git a/html/tftpy-doc/module-tree.html b/html/tftpy-doc/module-tree.html new file mode 100644 index 0000000..aa1a209 --- /dev/null +++ b/html/tftpy-doc/module-tree.html @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>Module Hierarchy</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Trees </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="module-tree.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<center><b> + [ <a href="module-tree.html">Module Hierarchy</a> + | <a href="class-tree.html">Class Hierarchy</a> ] +</b></center><br /> +<h1 class="epydoc">Module Hierarchy</h1> +<ul class="nomargin-top"> + <li> <strong class="uidlink"><a href="tftpy-module.html">tftpy</a></strong>: <em class="summary">This library implements the tftp protocol, based on rfc 1350.</em> + <ul> + <li> <strong class="uidlink">tftpy.TftpClient</strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a></strong> </li> + <li> <strong class="uidlink">tftpy.TftpPacketFactory</strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a></strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a></strong> </li> + <li> <strong class="uidlink">tftpy.TftpServer</strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a></strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a></strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a></strong> </li> + </ul> + </li> +</ul> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Trees </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/redirect.html b/html/tftpy-doc/redirect.html new file mode 100644 index 0000000..db5e3c0 --- /dev/null +++ b/html/tftpy-doc/redirect.html @@ -0,0 +1,38 @@ +<html><head><title>Epydoc Redirect Page</title> +<meta http-equiv="cache-control" content="no-cache" /> +<meta http-equiv="expires" content="0" /> +<meta http-equiv="pragma" content="no-cache" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> +<body> +<script type="text/javascript"> +<!-- +var pages = ["tftpy.TftpPacketTypes.TftpPacketWithOptions-c", "tftpy.TftpPacketFactory'.TftpPacketFactory-c", "tftpy.TftpStates.TftpContextClientDownload-c", "tftpy.TftpStates.TftpContextClientUpload-c", "tftpy.TftpPacketTypes.TftpPacketInitial-c", "tftpy.TftpStates.TftpStateServerRecvRRQ-c", "tftpy.TftpStates.TftpStateServerRecvWRQ-c", "tftpy.TftpStates.TftpStateServerStart-c", "tftpy.TftpPacketTypes.TftpPacketOACK-c", "tftpy.TftpPacketTypes.TftpPacketACK-c", "tftpy.TftpPacketTypes.TftpPacketDAT-c", "tftpy.TftpPacketTypes.TftpPacketERR-c", "tftpy.TftpPacketTypes.TftpPacketRRQ-c", "tftpy.TftpPacketTypes.TftpPacketWRQ-c", "tftpy.TftpStates.TftpStateExpectACK-c", "tftpy.TftpStates.TftpStateExpectDAT-c", "tftpy.TftpStates.TftpContextServer-c", "tftpy.TftpPacketTypes.TftpSession-c", "tftpy.TftpStates.TftpStateSentRRQ-c", "tftpy.TftpStates.TftpStateSentWRQ-c", "tftpy.TftpPacketTypes.TftpPacket-c", "tftpy.TftpShared.TftpException-c", "tftpy.TftpClient'.TftpClient-c", "tftpy.TftpServer'.TftpServer-c", "tftpy.TftpStates.TftpContext-c", "tftpy.TftpStates.TftpMetrics-c", "tftpy.TftpShared.TftpErrors-c", "tftpy.TftpStates.TftpState-c", "tftpy.TftpPacketFactory'-m", "tftpy.TftpPacketTypes-m", "tftpy.TftpClient'-m", "tftpy.TftpServer'-m", "tftpy.TftpShared-m", "tftpy.TftpStates-m", "tftpy-m"]; +var dottedName = get_anchor(); +if (dottedName) { + var target = redirect_url(dottedName); + if (target) window.location.replace(target); +} +// --> +</script> + +<h3>Epydoc Auto-redirect page</h3> + +<p>When javascript is enabled, this page will redirect URLs of +the form <tt>redirect.html#<i>dotted.name</i></tt> to the +documentation for the object with the given fully-qualified +dotted name.</p> +<p><a id="message"> </a></p> + +<script type="text/javascript"> +<!-- +if (dottedName) { + var msg = document.getElementById("message"); + msg.innerHTML = "No documentation found for <tt>"+ + dottedName+"</tt>"; +} +// --> +</script> + +</body> +</html> diff --git a/html/tftpy-doc/tftpy-module.html b/html/tftpy-doc/tftpy-module.html new file mode 100644 index 0000000..56850de --- /dev/null +++ b/html/tftpy-doc/tftpy-module.html @@ -0,0 +1,165 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Home </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + Package tftpy + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy-module.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== PACKAGE DESCRIPTION ==================== --> +<h1 class="epydoc">Package tftpy</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy-pysrc.html">source code</a></span></p> +<p>This library implements the tftp protocol, based on rfc 1350. + http://www.faqs.org/rfcs/rfc1350.html At the moment it implements only a + client class, but will include a server, with support for variable block + sizes.</p> + +<!-- ==================== SUBMODULES ==================== --> +<a name="section-Submodules"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Submodules</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Submodules" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr><td class="summary"> + <ul class="nomargin"> + <li> <strong class="uidlink">tftpy.TftpClient</strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpClient%27-module.html">tftpy.TftpClient'</a></strong> </li> + <li> <strong class="uidlink">tftpy.TftpPacketFactory</strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketFactory%27-module.html">tftpy.TftpPacketFactory'</a></strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpPacketTypes-module.html">tftpy.TftpPacketTypes</a></strong> </li> + <li> <strong class="uidlink">tftpy.TftpServer</strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpServer%27-module.html">tftpy.TftpServer'</a></strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpShared-module.html">tftpy.TftpShared</a></strong> </li> + <li> <strong class="uidlink"><a href="tftpy.TftpStates-module.html">tftpy.TftpStates</a></strong> </li> + </ul></td></tr> +</table> + +<br /> +<!-- ==================== VARIABLES ==================== --> +<a name="section-Variables"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Variables</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Variables" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="verlist"></a><span class="summary-name">verlist</span> = <code title="(2, 5, 2, 'final', 0)"><code class="variable-group">(</code>2<code class="variable-op">, </code>5<code class="variable-op">, </code>2<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">final</code><code class="variable-quote">'</code><code class="variable-op">, </code>0<code class="variable-group">)</code></code> + </td> + </tr> +</table> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Home </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy-pysrc.html b/html/tftpy-doc/tftpy-pysrc.html new file mode 100644 index 0000000..2d1bc55 --- /dev/null +++ b/html/tftpy-doc/tftpy-pysrc.html @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Home </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + Package tftpy + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy-pysrc.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<h1 class="epydoc">Source Code for <a href="tftpy-module.html">Package tftpy</a></h1> +<pre class="py-src"> +<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-docstring">"""This library implements the tftp protocol, based on rfc 1350.</tt> </tt> +<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-docstring">http://www.faqs.org/rfcs/rfc1350.html</tt> </tt> +<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-docstring">At the moment it implements only a client class, but will include a server,</tt> </tt> +<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-docstring">with support for variable block sizes.</tt> </tt> +<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt> +<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"> </tt> +<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt> +<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"> </tt> +<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"># Make sure that this is at least Python 2.3</tt> </tt> +<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-0" class="py-name" targets="Variable tftpy.verlist=tftpy-module.html#verlist"><a title="tftpy.verlist" class="py-name" href="#" onclick="return doclink('link-0', 'verlist', 'link-0');">verlist</a></tt> <tt class="py-op">=</tt> <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">version_info</tt> </tt> +<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-1" class="py-name"><a title="tftpy.verlist" class="py-name" href="#" onclick="return doclink('link-1', 'verlist', 'link-0');">verlist</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">>=</tt> <tt class="py-number">2</tt> <tt class="py-keyword">or</tt> <tt class="py-keyword">not</tt> <tt id="link-2" class="py-name"><a title="tftpy.verlist" class="py-name" href="#" onclick="return doclink('link-2', 'verlist', 'link-0');">verlist</a></tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">>=</tt> <tt class="py-number">3</tt><tt class="py-op">:</tt> </tt> +<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">AssertionError</tt><tt class="py-op">,</tt> <tt class="py-string">"Requires at least Python 2.3"</tt> </tt> +<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"> </tt> +<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-3" class="py-name" targets="Module tftpy.TftpShared=tftpy.TftpShared-module.html"><a title="tftpy.TftpShared" class="py-name" href="#" onclick="return doclink('link-3', 'TftpShared', 'link-3');">TftpShared</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name" targets="Module tftpy.TftpPacketTypes=tftpy.TftpPacketTypes-module.html"><a title="tftpy.TftpPacketTypes" class="py-name" href="#" onclick="return doclink('link-4', 'TftpPacketTypes', 'link-4');">TftpPacketTypes</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-5" class="py-name" targets="Class tftpy.TftpPacketFactory'.TftpPacketFactory=tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html"><a title="tftpy.TftpPacketFactory'.TftpPacketFactory" class="py-name" href="#" onclick="return doclink('link-5', 'TftpPacketFactory', 'link-5');">TftpPacketFactory</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-6" class="py-name" targets="Class tftpy.TftpClient'.TftpClient=tftpy.TftpClient%27.TftpClient-class.html"><a title="tftpy.TftpClient'.TftpClient" class="py-name" href="#" onclick="return doclink('link-6', 'TftpClient', 'link-6');">TftpClient</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-7" class="py-name" targets="Class tftpy.TftpServer'.TftpServer=tftpy.TftpServer%27.TftpServer-class.html"><a title="tftpy.TftpServer'.TftpServer" class="py-name" href="#" onclick="return doclink('link-7', 'TftpServer', 'link-7');">TftpServer</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"> </tt><script type="text/javascript"> +<!-- +expandto(location.href); +// --> +</script> +</pre> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th bgcolor="#70b0f0" class="navbar-select" + > Home </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:22 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpClient'-module.html b/html/tftpy-doc/tftpy.TftpClient'-module.html new file mode 100644 index 0000000..7cfca4c --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpClient'-module.html @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpClient'</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpClient' + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpClient%27-module.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== MODULE DESCRIPTION ==================== --> +<h1 class="epydoc">Module TftpClient'</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpClient%27-pysrc.html">source code</a></span></p> +<!-- ==================== CLASSES ==================== --> +<a name="section-Classes"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Classes</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Classes" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpClient%27.TftpClient-class.html" class="summary-name">TftpClient</a><br /> + This class is an implementation of a tftp client. + </td> + </tr> +</table> +<!-- ==================== VARIABLES ==================== --> +<a name="section-Variables"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Variables</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Variables" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="DEF_BLKSIZE"></a><span class="summary-name">DEF_BLKSIZE</span> = <code title="512">512</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="DEF_TFTP_PORT"></a><span class="summary-name">DEF_TFTP_PORT</span> = <code title="69">69</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="LOG_LEVEL"></a><span class="summary-name">LOG_LEVEL</span> = <code title="0">0</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MAX_BLKSIZE"></a><span class="summary-name">MAX_BLKSIZE</span> = <code title="65536">65536</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MAX_DUPS"></a><span class="summary-name">MAX_DUPS</span> = <code title="20">20</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MIN_BLKSIZE"></a><span class="summary-name">MIN_BLKSIZE</span> = <code title="8">8</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="SOCK_TIMEOUT"></a><span class="summary-name">SOCK_TIMEOUT</span> = <code title="5">5</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="TIMEOUT_RETRIES"></a><span class="summary-name">TIMEOUT_RETRIES</span> = <code title="5">5</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="log"></a><span class="summary-name">log</span> = <code title="logging.getLogger('tftpy')">logging.getLogger('tftpy')</code> + </td> + </tr> +</table> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpClient'-pysrc.html b/html/tftpy-doc/tftpy.TftpClient'-pysrc.html new file mode 100644 index 0000000..bb2b65f --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpClient'-pysrc.html @@ -0,0 +1,297 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpClient'</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpClient' + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpClient%27-pysrc.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<h1 class="epydoc">Source Code for <a href="tftpy.TftpClient%27-module.html">Module tftpy.TftpClient'</a></h1> +<pre class="py-src"> +<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt><tt class="py-op">,</tt> <tt class="py-name">types</tt> </tt> +<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module tftpy.TftpShared=tftpy.TftpShared-module.html"><a title="tftpy.TftpShared" class="py-name" href="#" onclick="return doclink('link-0', 'TftpShared', 'link-0');">TftpShared</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name" targets="Class tftpy.TftpPacketFactory'.TftpPacketFactory=tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html"><a title="tftpy.TftpPacketFactory'.TftpPacketFactory" class="py-name" href="#" onclick="return doclink('link-1', 'TftpPacketFactory', 'link-1');">TftpPacketFactory</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-2" class="py-name" targets="Module tftpy.TftpStates=tftpy.TftpStates-module.html"><a title="tftpy.TftpStates" class="py-name" href="#" onclick="return doclink('link-2', 'TftpStates', 'link-2');">TftpStates</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Class tftpy.TftpStates.TftpContextClientDownload=tftpy.TftpStates.TftpContextClientDownload-class.html"><a title="tftpy.TftpStates.TftpContextClientDownload" class="py-name" href="#" onclick="return doclink('link-3', 'TftpContextClientDownload', 'link-3');">TftpContextClientDownload</a></tt><tt class="py-op">,</tt> <tt id="link-4" class="py-name" targets="Class tftpy.TftpStates.TftpContextClientUpload=tftpy.TftpStates.TftpContextClientUpload-class.html"><a title="tftpy.TftpStates.TftpContextClientUpload" class="py-name" href="#" onclick="return doclink('link-4', 'TftpContextClientUpload', 'link-4');">TftpContextClientUpload</a></tt> </tt> +<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"> </tt> +<a name="TftpClient"></a><div id="TftpClient-def"><a name="L6"></a><tt class="py-lineno"> 6</tt> <a class="py-toggle" href="#" id="TftpClient-toggle" onclick="return toggle('TftpClient');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpClient'.TftpClient-class.html">TftpClient</a><tt class="py-op">(</tt><tt class="py-base-class">TftpSession</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpClient-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="TftpClient-expanded"><a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"> <tt class="py-docstring">"""This class is an implementation of a tftp client. Once instantiated, a</tt> </tt> +<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring"> download can be initiated via the download() method."""</tt> </tt> +<a name="TftpClient.__init__"></a><div id="TftpClient.__init__-def"><a name="L9"></a><tt class="py-lineno"> 9</tt> <a class="py-toggle" href="#" id="TftpClient.__init__-toggle" onclick="return toggle('TftpClient.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpClient'.TftpClient-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">host</tt><tt class="py-op">,</tt> <tt class="py-param">port</tt><tt class="py-op">,</tt> <tt class="py-param">options</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpClient.__init__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="TftpClient.__init__-expanded"><a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"> <tt class="py-docstring">"""This constructor returns an instance of TftpClient, taking the</tt> </tt> +<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-docstring"> remote host, the remote port, and the filename to fetch."""</tt> </tt> +<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"> <tt id="link-5" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpSession=tftpy.TftpPacketTypes.TftpSession-class.html"><a title="tftpy.TftpPacketTypes.TftpSession" class="py-name" href="#" onclick="return doclink('link-5', 'TftpSession', 'link-5');">TftpSession</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Method tftpy.TftpClient'.TftpClient.__init__()=tftpy.TftpClient%27.TftpClient-class.html#__init__,Method tftpy.TftpPacketFactory'.TftpPacketFactory.__init__()=tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacket.__init__()=tftpy.TftpPacketTypes.TftpPacket-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketACK.__init__()=tftpy.TftpPacketTypes.TftpPacketACK-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketDAT.__init__()=tftpy.TftpPacketTypes.TftpPacketDAT-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketERR.__init__()=tftpy.TftpPacketTypes.TftpPacketERR-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketInitial.__init__()=tftpy.TftpPacketTypes.TftpPacketInitial-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketOACK.__init__()=tftpy.TftpPacketTypes.TftpPacketOACK-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketRRQ.__init__()=tftpy.TftpPacketTypes.TftpPacketRRQ-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketWRQ.__init__()=tftpy.TftpPacketTypes.TftpPacketWRQ-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__()=tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#__init__,Method tftpy.TftpServer'.TftpServer.__init__()=tftpy.TftpServer%27.TftpServer-class.html#__init__,Method tftpy.TftpStates.TftpContext.__init__()=tftpy.TftpStates.TftpContext-class.html#__init__,Method tftpy.TftpStates.TftpContextClientDownload.__init__()=tftpy.TftpStates.TftpContextClientDownload-class.html#__init__,Method tftpy.TftpStates.TftpContextClientUpload.__init__()=tftpy.TftpStates.TftpContextClientUpload-class.html#__init__,Method tftpy.TftpStates.TftpContextServer.__init__()=tftpy.TftpStates.TftpContextServer-class.html#__init__,Method tftpy.TftpStates.TftpMetrics.__init__()=tftpy.TftpStates.TftpMetrics-class.html#__init__,Method tftpy.TftpStates.TftpState.__init__()=tftpy.TftpStates.TftpState-class.html#__init__"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-6', '__init__', 'link-6');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name" targets="Variable tftpy.TftpStates.TftpContext.host=tftpy.TftpStates.TftpContext-class.html#host"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-7', 'host', 'link-7');">host</a></tt> <tt class="py-op">=</tt> <tt id="link-8" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-8', 'host', 'link-7');">host</a></tt> </tt> +<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">iport</tt> <tt class="py-op">=</tt> <tt class="py-name">port</tt> </tt> +<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Variable tftpy.TftpPacketTypes.TftpPacketWithOptions.options=tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-9', 'options', 'link-9');">options</a></tt> <tt class="py-op">=</tt> <tt id="link-10" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-10', 'options', 'link-9');">options</a></tt> </tt> +<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: If the blksize is DEF_BLKSIZE, we should just skip sending</tt> </tt> +<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># it.</tt> </tt> +<a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-11', 'options', 'link-9');">options</a></tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-string">'blksize'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"> <tt class="py-name">size</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-12', 'options', 'link-9');">options</a></tt><tt class="py-op">[</tt><tt class="py-string">'blksize'</tt><tt class="py-op">]</tt> </tt> +<a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"> <tt id="link-13" class="py-name" targets="Function tftpy.TftpShared.tftpassert()=tftpy.TftpShared-module.html#tftpassert"><a title="tftpy.TftpShared.tftpassert" class="py-name" href="#" onclick="return doclink('link-13', 'tftpassert', 'link-13');">tftpassert</a></tt><tt class="py-op">(</tt><tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">IntType</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">size</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">"blksize must be an int"</tt><tt class="py-op">)</tt> </tt> +<a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">size</tt> <tt class="py-op"><</tt> <tt id="link-14" class="py-name" targets="Variable tftpy.TftpClient'.MIN_BLKSIZE=tftpy.TftpClient%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpPacketFactory'.MIN_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpServer'.MIN_BLKSIZE=tftpy.TftpServer%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpShared.MIN_BLKSIZE=tftpy.TftpShared-module.html#MIN_BLKSIZE"><a title="tftpy.TftpClient'.MIN_BLKSIZE +tftpy.TftpPacketFactory'.MIN_BLKSIZE +tftpy.TftpServer'.MIN_BLKSIZE +tftpy.TftpShared.MIN_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-14', 'MIN_BLKSIZE', 'link-14');">MIN_BLKSIZE</a></tt> <tt class="py-keyword">or</tt> <tt class="py-name">size</tt> <tt class="py-op">></tt> <tt id="link-15" class="py-name" targets="Variable tftpy.TftpClient'.MAX_BLKSIZE=tftpy.TftpClient%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpPacketFactory'.MAX_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpServer'.MAX_BLKSIZE=tftpy.TftpServer%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpShared.MAX_BLKSIZE=tftpy.TftpShared-module.html#MAX_BLKSIZE"><a title="tftpy.TftpClient'.MAX_BLKSIZE +tftpy.TftpPacketFactory'.MAX_BLKSIZE +tftpy.TftpServer'.MAX_BLKSIZE +tftpy.TftpShared.MAX_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-15', 'MAX_BLKSIZE', 'link-15');">MAX_BLKSIZE</a></tt><tt class="py-op">:</tt> </tt> +<a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-16" class="py-name" targets="Class tftpy.TftpShared.TftpException=tftpy.TftpShared.TftpException-class.html"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-16', 'TftpException', 'link-16');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Invalid blksize: %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">size</tt> </tt> +<a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-17', 'options', 'link-9');">options</a></tt><tt class="py-op">[</tt><tt class="py-string">'blksize'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-18" class="py-name" targets="Variable tftpy.TftpClient'.DEF_BLKSIZE=tftpy.TftpClient%27-module.html#DEF_BLKSIZE,Variable tftpy.TftpPacketFactory'.DEF_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#DEF_BLKSIZE,Variable tftpy.TftpServer'.DEF_BLKSIZE=tftpy.TftpServer%27-module.html#DEF_BLKSIZE,Variable tftpy.TftpShared.DEF_BLKSIZE=tftpy.TftpShared-module.html#DEF_BLKSIZE"><a title="tftpy.TftpClient'.DEF_BLKSIZE +tftpy.TftpPacketFactory'.DEF_BLKSIZE +tftpy.TftpServer'.DEF_BLKSIZE +tftpy.TftpShared.DEF_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-18', 'DEF_BLKSIZE', 'link-18');">DEF_BLKSIZE</a></tt> </tt> +</div><a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"> </tt> +<a name="TftpClient.download"></a><div id="TftpClient.download-def"><a name="L28"></a><tt class="py-lineno">28</tt> <a class="py-toggle" href="#" id="TftpClient.download-toggle" onclick="return toggle('TftpClient.download');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpClient'.TftpClient-class.html#download">download</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">output</tt><tt class="py-op">,</tt> <tt class="py-param">packethook</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">=</tt><tt id="link-19" class="py-name" targets="Variable tftpy.TftpClient'.SOCK_TIMEOUT=tftpy.TftpClient%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpPacketFactory'.SOCK_TIMEOUT=tftpy.TftpPacketFactory%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpServer'.SOCK_TIMEOUT=tftpy.TftpServer%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpShared.SOCK_TIMEOUT=tftpy.TftpShared-module.html#SOCK_TIMEOUT"><a title="tftpy.TftpClient'.SOCK_TIMEOUT +tftpy.TftpPacketFactory'.SOCK_TIMEOUT +tftpy.TftpServer'.SOCK_TIMEOUT +tftpy.TftpShared.SOCK_TIMEOUT" class="py-name" href="#" onclick="return doclink('link-19', 'SOCK_TIMEOUT', 'link-19');">SOCK_TIMEOUT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpClient.download-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="TftpClient.download-expanded"><a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"> <tt class="py-docstring">"""This method initiates a tftp download from the configured remote</tt> </tt> +<a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"><tt class="py-docstring"> host, requesting the filename passed. It saves the file to a local</tt> </tt> +<a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"><tt class="py-docstring"> file specified in the output parameter. If a packethook is provided,</tt> </tt> +<a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"><tt class="py-docstring"> it must be a function that takes a single parameter, which will be a</tt> </tt> +<a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"><tt class="py-docstring"> copy of each DAT packet received in the form of a TftpPacketDAT</tt> </tt> +<a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"><tt class="py-docstring"> object. The timeout parameter may be used to override the default</tt> </tt> +<a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"><tt class="py-docstring"> SOCK_TIMEOUT setting, which is the amount of time that the client will</tt> </tt> +<a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"><tt class="py-docstring"> wait for a receive packet to arrive."""</tt> </tt> +<a name="L37"></a><tt class="py-lineno">37</tt> <tt class="py-line"> <tt class="py-comment"># We're downloading.</tt> </tt> +<a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-20" class="py-name" targets="Variable tftpy.TftpClient'.log=tftpy.TftpClient%27-module.html#log,Variable tftpy.TftpPacketFactory'.log=tftpy.TftpPacketFactory%27-module.html#log,Variable tftpy.TftpServer'.log=tftpy.TftpServer%27-module.html#log,Variable tftpy.TftpShared.log=tftpy.TftpShared-module.html#log"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-20', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Creating download context with the following params:"</tt><tt class="py-op">)</tt> </tt> +<a name="L39"></a><tt class="py-lineno">39</tt> <tt class="py-line"> <tt id="link-21" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-21', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"host = %s, port = %s, filename = %s, output = %s"</tt> </tt> +<a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-22', 'host', 'link-7');">host</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">iport</tt><tt class="py-op">,</tt> <tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">output</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L41"></a><tt class="py-lineno">41</tt> <tt class="py-line"> <tt id="link-23" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-23', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"options = %s, packethook = %s, timeout = %s"</tt> </tt> +<a name="L42"></a><tt class="py-lineno">42</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-24', 'options', 'link-9');">options</a></tt><tt class="py-op">,</tt> <tt class="py-name">packethook</tt><tt class="py-op">,</tt> <tt class="py-name">timeout</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L43"></a><tt class="py-lineno">43</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt> <tt class="py-op">=</tt> <tt id="link-25" class="py-name"><a title="tftpy.TftpStates.TftpContextClientDownload" class="py-name" href="#" onclick="return doclink('link-25', 'TftpContextClientDownload', 'link-3');">TftpContextClientDownload</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-26', 'host', 'link-7');">host</a></tt><tt class="py-op">,</tt> </tt> +<a name="L44"></a><tt class="py-lineno">44</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">iport</tt><tt class="py-op">,</tt> </tt> +<a name="L45"></a><tt class="py-lineno">45</tt> <tt class="py-line"> <tt class="py-name">filename</tt><tt class="py-op">,</tt> </tt> +<a name="L46"></a><tt class="py-lineno">46</tt> <tt class="py-line"> <tt class="py-name">output</tt><tt class="py-op">,</tt> </tt> +<a name="L47"></a><tt class="py-lineno">47</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-27', 'options', 'link-9');">options</a></tt><tt class="py-op">,</tt> </tt> +<a name="L48"></a><tt class="py-lineno">48</tt> <tt class="py-line"> <tt class="py-name">packethook</tt><tt class="py-op">,</tt> </tt> +<a name="L49"></a><tt class="py-lineno">49</tt> <tt class="py-line"> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt> +<a name="L50"></a><tt class="py-lineno">50</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Method tftpy.TftpStates.TftpContext.start()=tftpy.TftpStates.TftpContext-class.html#start,Method tftpy.TftpStates.TftpContextClientDownload.start()=tftpy.TftpStates.TftpContextClientDownload-class.html#start,Method tftpy.TftpStates.TftpContextClientUpload.start()=tftpy.TftpStates.TftpContextClientUpload-class.html#start,Method tftpy.TftpStates.TftpContextServer.start()=tftpy.TftpStates.TftpContextServer-class.html#start"><a title="tftpy.TftpStates.TftpContext.start +tftpy.TftpStates.TftpContextClientDownload.start +tftpy.TftpStates.TftpContextClientUpload.start +tftpy.TftpStates.TftpContextServer.start" class="py-name" href="#" onclick="return doclink('link-28', 'start', 'link-28');">start</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L51"></a><tt class="py-lineno">51</tt> <tt class="py-line"> <tt class="py-comment"># Download happens here</tt> </tt> +<a name="L52"></a><tt class="py-lineno">52</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method tftpy.TftpStates.TftpContext.end()=tftpy.TftpStates.TftpContext-class.html#end,Method tftpy.TftpStates.TftpContextClientDownload.end()=tftpy.TftpStates.TftpContextClientDownload-class.html#end,Method tftpy.TftpStates.TftpContextClientUpload.end()=tftpy.TftpStates.TftpContextClientUpload-class.html#end,Method tftpy.TftpStates.TftpContextServer.end()=tftpy.TftpStates.TftpContextServer-class.html#end"><a title="tftpy.TftpStates.TftpContext.end +tftpy.TftpStates.TftpContextClientDownload.end +tftpy.TftpStates.TftpContextClientUpload.end +tftpy.TftpStates.TftpContextServer.end" class="py-name" href="#" onclick="return doclink('link-29', 'end', 'link-29');">end</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L53"></a><tt class="py-lineno">53</tt> <tt class="py-line"> </tt> +<a name="L54"></a><tt class="py-lineno">54</tt> <tt class="py-line"> <tt class="py-name">metrics</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt> </tt> +<a name="L55"></a><tt class="py-lineno">55</tt> <tt class="py-line"> </tt> +<a name="L56"></a><tt class="py-lineno">56</tt> <tt class="py-line"> <tt id="link-30" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-30', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> </tt> +<a name="L57"></a><tt class="py-lineno">57</tt> <tt class="py-line"> <tt id="link-31" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-31', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Download complete."</tt><tt class="py-op">)</tt> </tt> +<a name="L58"></a><tt class="py-lineno">58</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">duration</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L59"></a><tt class="py-lineno">59</tt> <tt class="py-line"> <tt id="link-32" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-32', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Duration too short, rate undetermined"</tt><tt class="py-op">)</tt> </tt> +<a name="L60"></a><tt class="py-lineno">60</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L61"></a><tt class="py-lineno">61</tt> <tt class="py-line"> <tt id="link-33" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-33', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Downloaded %.2f bytes in %.2f seconds"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">bytes</tt><tt class="py-op">,</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">duration</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L62"></a><tt class="py-lineno">62</tt> <tt class="py-line"> <tt id="link-34" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-34', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Average rate: %.2f kbps"</tt> <tt class="py-op">%</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">kbps</tt><tt class="py-op">)</tt> </tt> +<a name="L63"></a><tt class="py-lineno">63</tt> <tt class="py-line"> <tt id="link-35" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-35', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"%.2f bytes in resent data"</tt> <tt class="py-op">%</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">resent_bytes</tt><tt class="py-op">)</tt> </tt> +<a name="L64"></a><tt class="py-lineno">64</tt> <tt class="py-line"> <tt id="link-36" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-36', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Received %d duplicate packets"</tt> <tt class="py-op">%</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">dupcount</tt><tt class="py-op">)</tt> </tt> +</div><a name="L65"></a><tt class="py-lineno">65</tt> <tt class="py-line"> </tt> +<a name="TftpClient.upload"></a><div id="TftpClient.upload-def"><a name="L66"></a><tt class="py-lineno">66</tt> <a class="py-toggle" href="#" id="TftpClient.upload-toggle" onclick="return toggle('TftpClient.upload');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpClient'.TftpClient-class.html#upload">upload</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">input</tt><tt class="py-op">,</tt> <tt class="py-param">packethook</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">=</tt><tt id="link-37" class="py-name"><a title="tftpy.TftpClient'.SOCK_TIMEOUT +tftpy.TftpPacketFactory'.SOCK_TIMEOUT +tftpy.TftpServer'.SOCK_TIMEOUT +tftpy.TftpShared.SOCK_TIMEOUT" class="py-name" href="#" onclick="return doclink('link-37', 'SOCK_TIMEOUT', 'link-19');">SOCK_TIMEOUT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpClient.upload-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="TftpClient.upload-expanded"><a name="L67"></a><tt class="py-lineno">67</tt> <tt class="py-line"> <tt class="py-comment"># Open the input file.</tt> </tt> +<a name="L68"></a><tt class="py-lineno">68</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># FIXME: As of the state machine, this is now broken. Need to</tt> </tt> +<a name="L69"></a><tt class="py-lineno">69</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># implement with new state machine.</tt> </tt> +<a name="L70"></a><tt class="py-lineno">70</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt> <tt class="py-op">=</tt> <tt id="link-38" class="py-name"><a title="tftpy.TftpStates.TftpContextClientUpload" class="py-name" href="#" onclick="return doclink('link-38', 'TftpContextClientUpload', 'link-4');">TftpContextClientUpload</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-39', 'host', 'link-7');">host</a></tt><tt class="py-op">,</tt> </tt> +<a name="L71"></a><tt class="py-lineno">71</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">iport</tt><tt class="py-op">,</tt> </tt> +<a name="L72"></a><tt class="py-lineno">72</tt> <tt class="py-line"> <tt class="py-name">filename</tt><tt class="py-op">,</tt> </tt> +<a name="L73"></a><tt class="py-lineno">73</tt> <tt class="py-line"> <tt class="py-name">input</tt><tt class="py-op">,</tt> </tt> +<a name="L74"></a><tt class="py-lineno">74</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-40', 'options', 'link-9');">options</a></tt><tt class="py-op">,</tt> </tt> +<a name="L75"></a><tt class="py-lineno">75</tt> <tt class="py-line"> <tt class="py-name">packethook</tt><tt class="py-op">,</tt> </tt> +<a name="L76"></a><tt class="py-lineno">76</tt> <tt class="py-line"> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt> +<a name="L77"></a><tt class="py-lineno">77</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="tftpy.TftpStates.TftpContext.start +tftpy.TftpStates.TftpContextClientDownload.start +tftpy.TftpStates.TftpContextClientUpload.start +tftpy.TftpStates.TftpContextServer.start" class="py-name" href="#" onclick="return doclink('link-41', 'start', 'link-28');">start</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L78"></a><tt class="py-lineno">78</tt> <tt class="py-line"> <tt class="py-comment"># Upload happens here</tt> </tt> +<a name="L79"></a><tt class="py-lineno">79</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name"><a title="tftpy.TftpStates.TftpContext.end +tftpy.TftpStates.TftpContextClientDownload.end +tftpy.TftpStates.TftpContextClientUpload.end +tftpy.TftpStates.TftpContextServer.end" class="py-name" href="#" onclick="return doclink('link-42', 'end', 'link-29');">end</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L80"></a><tt class="py-lineno">80</tt> <tt class="py-line"> </tt> +<a name="L81"></a><tt class="py-lineno">81</tt> <tt class="py-line"> <tt class="py-name">metrics</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt> </tt> +<a name="L82"></a><tt class="py-lineno">82</tt> <tt class="py-line"> </tt> +<a name="L83"></a><tt class="py-lineno">83</tt> <tt class="py-line"> <tt id="link-43" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-43', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> </tt> +<a name="L84"></a><tt class="py-lineno">84</tt> <tt class="py-line"> <tt id="link-44" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-44', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Upload complete."</tt><tt class="py-op">)</tt> </tt> +<a name="L85"></a><tt class="py-lineno">85</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">duration</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L86"></a><tt class="py-lineno">86</tt> <tt class="py-line"> <tt id="link-45" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-45', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Duration too short, rate undetermined"</tt><tt class="py-op">)</tt> </tt> +<a name="L87"></a><tt class="py-lineno">87</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L88"></a><tt class="py-lineno">88</tt> <tt class="py-line"> <tt id="link-46" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-46', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Uploaded %.2f bytes in %.2f seconds"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">bytes</tt><tt class="py-op">,</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">duration</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L89"></a><tt class="py-lineno">89</tt> <tt class="py-line"> <tt id="link-47" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-47', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Average rate: %.2f kbps"</tt> <tt class="py-op">%</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">kbps</tt><tt class="py-op">)</tt> </tt> +<a name="L90"></a><tt class="py-lineno">90</tt> <tt class="py-line"> <tt id="link-48" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-48', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"%.2f bytes in resent data"</tt> <tt class="py-op">%</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">resent_bytes</tt><tt class="py-op">)</tt> </tt> +<a name="L91"></a><tt class="py-lineno">91</tt> <tt class="py-line"> <tt id="link-49" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-49', 'log', 'link-20');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Resent %d packets"</tt> <tt class="py-op">%</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">dupcount</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L92"></a><tt class="py-lineno">92</tt> <tt class="py-line"> </tt><script type="text/javascript"> +<!-- +expandto(location.href); +// --> +</script> +</pre> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:22 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpClient'.TftpClient-class.html b/html/tftpy-doc/tftpy.TftpClient'.TftpClient-class.html new file mode 100644 index 0000000..3ccee38 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpClient'.TftpClient-class.html @@ -0,0 +1,314 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpClient'.TftpClient</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpClient%27-module.html">Module TftpClient'</a> :: + Class TftpClient + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpClient%27.TftpClient-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpClient</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpClient%27-pysrc.html#TftpClient">source code</a></span></p> +<pre class="base-tree"> + object --+ + | +<a href="tftpy.TftpPacketTypes.TftpSession-class.html">TftpPacketTypes.TftpSession</a> --+ + | + <strong class="uidshort">TftpClient</strong> +</pre> + +<hr /> +<p>This class is an implementation of a tftp client. Once instantiated, a + download can be initiated via the download() method.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpClient%27.TftpClient-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">host</span>, + <span class="summary-sig-arg">port</span>, + <span class="summary-sig-arg">options</span>=<span class="summary-sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>)</span><br /> + This constructor returns an instance of TftpClient, taking the remote + host, the remote port, and the filename to fetch.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpClient%27-pysrc.html#TftpClient.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpClient%27.TftpClient-class.html#download" class="summary-sig-name">download</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">filename</span>, + <span class="summary-sig-arg">output</span>, + <span class="summary-sig-arg">packethook</span>=<span class="summary-sig-default">None</span>, + <span class="summary-sig-arg">timeout</span>=<span class="summary-sig-default">5</span>)</span><br /> + This method initiates a tftp download from the configured remote + host, requesting the filename passed.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpClient%27-pysrc.html#TftpClient.download">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="upload"></a><span class="summary-sig-name">upload</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">filename</span>, + <span class="summary-sig-arg">input</span>, + <span class="summary-sig-arg">packethook</span>=<span class="summary-sig-default">None</span>, + <span class="summary-sig-arg">timeout</span>=<span class="summary-sig-default">5</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpClient%27-pysrc.html#TftpClient.upload">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">host</span>, + <span class="sig-arg">port</span>, + <span class="sig-arg">options</span>=<span class="sig-default"><code class="variable-group">{</code><code class="variable-group">}</code></span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpClient%27-pysrc.html#TftpClient.__init__">source code</a></span> + </td> + </tr></table> + + <p>This constructor returns an instance of TftpClient, taking the remote + host, the remote port, and the filename to fetch.</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + </dt> + </dl> +</td></tr></table> +</div> +<a name="download"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">download</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">filename</span>, + <span class="sig-arg">output</span>, + <span class="sig-arg">packethook</span>=<span class="sig-default">None</span>, + <span class="sig-arg">timeout</span>=<span class="sig-default">5</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpClient%27-pysrc.html#TftpClient.download">source code</a></span> + </td> + </tr></table> + + <p>This method initiates a tftp download from the configured remote host, + requesting the filename passed. It saves the file to a local file + specified in the output parameter. If a packethook is provided, it must + be a function that takes a single parameter, which will be a copy of each + DAT packet received in the form of a TftpPacketDAT object. The timeout + parameter may be used to override the default SOCK_TIMEOUT setting, which + is the amount of time that the client will wait for a receive packet to + arrive.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketFactory'-module.html b/html/tftpy-doc/tftpy.TftpPacketFactory'-module.html new file mode 100644 index 0000000..ad5bba1 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketFactory'-module.html @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketFactory'</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpPacketFactory' + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketFactory%27-module.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== MODULE DESCRIPTION ==================== --> +<h1 class="epydoc">Module TftpPacketFactory'</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketFactory%27-pysrc.html">source code</a></span></p> +<!-- ==================== CLASSES ==================== --> +<a name="section-Classes"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Classes</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Classes" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html" class="summary-name">TftpPacketFactory</a><br /> + This class generates TftpPacket objects. + </td> + </tr> +</table> +<!-- ==================== VARIABLES ==================== --> +<a name="section-Variables"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Variables</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Variables" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="DEF_BLKSIZE"></a><span class="summary-name">DEF_BLKSIZE</span> = <code title="512">512</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="DEF_TFTP_PORT"></a><span class="summary-name">DEF_TFTP_PORT</span> = <code title="69">69</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="LOG_LEVEL"></a><span class="summary-name">LOG_LEVEL</span> = <code title="0">0</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MAX_BLKSIZE"></a><span class="summary-name">MAX_BLKSIZE</span> = <code title="65536">65536</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MAX_DUPS"></a><span class="summary-name">MAX_DUPS</span> = <code title="20">20</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MIN_BLKSIZE"></a><span class="summary-name">MIN_BLKSIZE</span> = <code title="8">8</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="SOCK_TIMEOUT"></a><span class="summary-name">SOCK_TIMEOUT</span> = <code title="5">5</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="TIMEOUT_RETRIES"></a><span class="summary-name">TIMEOUT_RETRIES</span> = <code title="5">5</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="log"></a><span class="summary-name">log</span> = <code title="logging.getLogger('tftpy')">logging.getLogger('tftpy')</code> + </td> + </tr> +</table> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketFactory'-pysrc.html b/html/tftpy-doc/tftpy.TftpPacketFactory'-pysrc.html new file mode 100644 index 0000000..8c3452c --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketFactory'-pysrc.html @@ -0,0 +1,159 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketFactory'</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpPacketFactory' + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketFactory%27-pysrc.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<h1 class="epydoc">Source Code for <a href="tftpy.TftpPacketFactory%27-module.html">Module tftpy.TftpPacketFactory'</a></h1> +<pre class="py-src"> +<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module tftpy.TftpShared=tftpy.TftpShared-module.html"><a title="tftpy.TftpShared" class="py-name" href="#" onclick="return doclink('link-0', 'TftpShared', 'link-0');">TftpShared</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name" targets="Module tftpy.TftpPacketTypes=tftpy.TftpPacketTypes-module.html"><a title="tftpy.TftpPacketTypes" class="py-name" href="#" onclick="return doclink('link-1', 'TftpPacketTypes', 'link-1');">TftpPacketTypes</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"> </tt> +<a name="TftpPacketFactory"></a><div id="TftpPacketFactory-def"><a name="L4"></a><tt class="py-lineno"> 4</tt> <a class="py-toggle" href="#" id="TftpPacketFactory-toggle" onclick="return toggle('TftpPacketFactory');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpPacketFactory'.TftpPacketFactory-class.html">TftpPacketFactory</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketFactory-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="TftpPacketFactory-expanded"><a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"> <tt class="py-docstring">"""This class generates TftpPacket objects. It is responsible for parsing</tt> </tt> +<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-docstring"> raw buffers off of the wire and returning objects representing them, via</tt> </tt> +<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-docstring"> the parse() method."""</tt> </tt> +<a name="TftpPacketFactory.__init__"></a><div id="TftpPacketFactory.__init__-def"><a name="L8"></a><tt class="py-lineno"> 8</tt> <a class="py-toggle" href="#" id="TftpPacketFactory.__init__-toggle" onclick="return toggle('TftpPacketFactory.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketFactory'.TftpPacketFactory-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketFactory.__init__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="TftpPacketFactory.__init__-expanded"><a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">classes</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt> +<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"> <tt class="py-number">1</tt><tt class="py-op">:</tt> <tt id="link-2" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketRRQ=tftpy.TftpPacketTypes.TftpPacketRRQ-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketRRQ" class="py-name" href="#" onclick="return doclink('link-2', 'TftpPacketRRQ', 'link-2');">TftpPacketRRQ</a></tt><tt class="py-op">,</tt> </tt> +<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"> <tt class="py-number">2</tt><tt class="py-op">:</tt> <tt id="link-3" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketWRQ=tftpy.TftpPacketTypes.TftpPacketWRQ-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketWRQ" class="py-name" href="#" onclick="return doclink('link-3', 'TftpPacketWRQ', 'link-3');">TftpPacketWRQ</a></tt><tt class="py-op">,</tt> </tt> +<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"> <tt class="py-number">3</tt><tt class="py-op">:</tt> <tt id="link-4" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketDAT=tftpy.TftpPacketTypes.TftpPacketDAT-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketDAT" class="py-name" href="#" onclick="return doclink('link-4', 'TftpPacketDAT', 'link-4');">TftpPacketDAT</a></tt><tt class="py-op">,</tt> </tt> +<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"> <tt class="py-number">4</tt><tt class="py-op">:</tt> <tt id="link-5" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketACK=tftpy.TftpPacketTypes.TftpPacketACK-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketACK" class="py-name" href="#" onclick="return doclink('link-5', 'TftpPacketACK', 'link-5');">TftpPacketACK</a></tt><tt class="py-op">,</tt> </tt> +<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"> <tt class="py-number">5</tt><tt class="py-op">:</tt> <tt id="link-6" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketERR=tftpy.TftpPacketTypes.TftpPacketERR-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketERR" class="py-name" href="#" onclick="return doclink('link-6', 'TftpPacketERR', 'link-6');">TftpPacketERR</a></tt><tt class="py-op">,</tt> </tt> +<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"> <tt class="py-number">6</tt><tt class="py-op">:</tt> <tt id="link-7" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketOACK=tftpy.TftpPacketTypes.TftpPacketOACK-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketOACK" class="py-name" href="#" onclick="return doclink('link-7', 'TftpPacketOACK', 'link-7');">TftpPacketOACK</a></tt> </tt> +<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"> <tt class="py-op">}</tt> </tt> +</div><a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"> </tt> +<a name="TftpPacketFactory.parse"></a><div id="TftpPacketFactory.parse-def"><a name="L18"></a><tt class="py-lineno">18</tt> <a class="py-toggle" href="#" id="TftpPacketFactory.parse-toggle" onclick="return toggle('TftpPacketFactory.parse');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketFactory'.TftpPacketFactory-class.html#parse">parse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">buffer</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketFactory.parse-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="TftpPacketFactory.parse-expanded"><a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"> <tt class="py-docstring">"""This method is used to parse an existing datagram into its</tt> </tt> +<a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"><tt class="py-docstring"> corresponding TftpPacket object. The buffer is the raw bytes off of</tt> </tt> +<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"><tt class="py-docstring"> the network."""</tt> </tt> +<a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"> <tt id="link-8" class="py-name" targets="Variable tftpy.TftpClient'.log=tftpy.TftpClient%27-module.html#log,Variable tftpy.TftpPacketFactory'.log=tftpy.TftpPacketFactory%27-module.html#log,Variable tftpy.TftpServer'.log=tftpy.TftpServer%27-module.html#log,Variable tftpy.TftpShared.log=tftpy.TftpShared-module.html#log"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-8', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"parsing a %d byte packet"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">opcode</tt><tt class="py-op">,</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt class="py-string">"!H"</tt><tt class="py-op">,</tt> <tt class="py-name">buffer</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"> <tt id="link-9" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-9', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"opcode is %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">opcode</tt><tt class="py-op">)</tt> </tt> +<a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"> <tt class="py-name">packet</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Method tftpy.TftpPacketFactory'.TftpPacketFactory.__create()=tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#__create"><a title="tftpy.TftpPacketFactory'.TftpPacketFactory.__create" class="py-name" href="#" onclick="return doclink('link-10', '__create', 'link-10');">__create</a></tt><tt class="py-op">(</tt><tt class="py-name">opcode</tt><tt class="py-op">)</tt> </tt> +<a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"> <tt class="py-name">packet</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">buffer</tt> </tt> +<a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">packet</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Method tftpy.TftpPacketTypes.TftpPacket.decode()=tftpy.TftpPacketTypes.TftpPacket-class.html#decode,Method tftpy.TftpPacketTypes.TftpPacketACK.decode()=tftpy.TftpPacketTypes.TftpPacketACK-class.html#decode,Method tftpy.TftpPacketTypes.TftpPacketDAT.decode()=tftpy.TftpPacketTypes.TftpPacketDAT-class.html#decode,Method tftpy.TftpPacketTypes.TftpPacketERR.decode()=tftpy.TftpPacketTypes.TftpPacketERR-class.html#decode,Method tftpy.TftpPacketTypes.TftpPacketInitial.decode()=tftpy.TftpPacketTypes.TftpPacketInitial-class.html#decode,Method tftpy.TftpPacketTypes.TftpPacketOACK.decode()=tftpy.TftpPacketTypes.TftpPacketOACK-class.html#decode"><a title="tftpy.TftpPacketTypes.TftpPacket.decode +tftpy.TftpPacketTypes.TftpPacketACK.decode +tftpy.TftpPacketTypes.TftpPacketDAT.decode +tftpy.TftpPacketTypes.TftpPacketERR.decode +tftpy.TftpPacketTypes.TftpPacketInitial.decode +tftpy.TftpPacketTypes.TftpPacketOACK.decode" class="py-name" href="#" onclick="return doclink('link-11', 'decode', 'link-11');">decode</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +</div><a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"> </tt> +<a name="TftpPacketFactory.__create"></a><div id="TftpPacketFactory.__create-def"><a name="L29"></a><tt class="py-lineno">29</tt> <a class="py-toggle" href="#" id="TftpPacketFactory.__create-toggle" onclick="return toggle('TftpPacketFactory.__create');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketFactory'.TftpPacketFactory-class.html#__create">__create</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">opcode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketFactory.__create-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="TftpPacketFactory.__create-expanded"><a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"> <tt class="py-docstring">"""This method returns the appropriate class object corresponding to</tt> </tt> +<a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"><tt class="py-docstring"> the passed opcode."""</tt> </tt> +<a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"> <tt id="link-12" class="py-name" targets="Function tftpy.TftpShared.tftpassert()=tftpy.TftpShared-module.html#tftpassert"><a title="tftpy.TftpShared.tftpassert" class="py-name" href="#" onclick="return doclink('link-12', 'tftpassert', 'link-12');">tftpassert</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">classes</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">opcode</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt> +<a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"> <tt class="py-string">"Unsupported opcode: %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">opcode</tt><tt class="py-op">)</tt> </tt> +<a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"> </tt> +<a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"> <tt class="py-name">packet</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">classes</tt><tt class="py-op">[</tt><tt class="py-name">opcode</tt><tt class="py-op">]</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"> </tt> +<a name="L37"></a><tt class="py-lineno">37</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">packet</tt> </tt> +</div></div><a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"> </tt><script type="text/javascript"> +<!-- +expandto(location.href); +// --> +</script> +</pre> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:22 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketFactory'.TftpPacketFactory-class.html b/html/tftpy-doc/tftpy.TftpPacketFactory'.TftpPacketFactory-class.html new file mode 100644 index 0000000..0955ad5 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketFactory'.TftpPacketFactory-class.html @@ -0,0 +1,295 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketFactory'.TftpPacketFactory</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpPacketFactory%27-module.html">Module TftpPacketFactory'</a> :: + Class TftpPacketFactory + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpPacketFactory</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketFactory%27-pysrc.html#TftpPacketFactory">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <strong class="uidshort">TftpPacketFactory</strong> +</pre> + +<hr /> +<p>This class generates TftpPacket objects. It is responsible for parsing + raw buffers off of the wire and returning objects representing them, via + the parse() method.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr class="private"> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="__create"></a><span class="summary-sig-name">__create</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">opcode</span>)</span><br /> + This method returns the appropriate class object corresponding to the + passed opcode.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketFactory%27-pysrc.html#TftpPacketFactory.__create">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketFactory%27-pysrc.html#TftpPacketFactory.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#parse" class="summary-sig-name">parse</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">buffer</span>)</span><br /> + This method is used to parse an existing datagram into its + corresponding TftpPacket object.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketFactory%27-pysrc.html#TftpPacketFactory.parse">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketFactory%27-pysrc.html#TftpPacketFactory.__init__">source code</a></span> + </td> + </tr></table> + + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="parse"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">parse</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">buffer</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketFactory%27-pysrc.html#TftpPacketFactory.parse">source code</a></span> + </td> + </tr></table> + + <p>This method is used to parse an existing datagram into its + corresponding TftpPacket object. The buffer is the raw bytes off of the + network.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes-module.html b/html/tftpy-doc/tftpy.TftpPacketTypes-module.html new file mode 100644 index 0000000..e971d36 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes-module.html @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpPacketTypes + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes-module.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== MODULE DESCRIPTION ==================== --> +<h1 class="epydoc">Module TftpPacketTypes</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html">source code</a></span></p> +<!-- ==================== CLASSES ==================== --> +<a name="section-Classes"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Classes</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Classes" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketTypes.TftpSession-class.html" class="summary-name">TftpSession</a><br /> + This class is the base class for the tftp client and server. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html" class="summary-name">TftpPacketWithOptions</a><br /> + This class exists to permit some TftpPacket subclasses to share + code regarding options handling. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html" class="summary-name">TftpPacket</a><br /> + This class is the parent class of all tftp packet classes. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html" class="summary-name">TftpPacketInitial</a><br /> + This class is a common parent class for the RRQ and WRQ packets, as + they share quite a bit of code. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html" class="summary-name">TftpPacketRRQ</a><br /> + 2 bytes string 1 byte string 1 byte... + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html" class="summary-name">TftpPacketWRQ</a><br /> + 2 bytes string 1 byte string 1 byte... + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html" class="summary-name">TftpPacketDAT</a><br /> + 2 bytes 2 bytes n bytes... + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html" class="summary-name">TftpPacketACK</a><br /> + 2 bytes 2 bytes... + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html" class="summary-name">TftpPacketERR</a><br /> + 2 bytes 2 bytes string 1 byte + ---------------------------------------- +ERROR | 05 | ErrorCode | ErrMsg | 0 | + ---------------------------------------- + Error Codes + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html" class="summary-name">TftpPacketOACK</a><br /> + # +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+ # + | opc | opt1 | 0 | value1 | 0 | optN | 0 | valueN | 0 | # + +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+ + </td> + </tr> +</table> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes-pysrc.html b/html/tftpy-doc/tftpy.TftpPacketTypes-pysrc.html new file mode 100644 index 0000000..2f2f34f --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes-pysrc.html @@ -0,0 +1,833 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpPacketTypes + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes-pysrc.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<h1 class="epydoc">Source Code for <a href="tftpy.TftpPacketTypes-module.html">Module tftpy.TftpPacketTypes</a></h1> +<pre class="py-src"> +<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">struct</tt> </tt> +<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module tftpy.TftpShared=tftpy.TftpShared-module.html"><a title="tftpy.TftpShared" class="py-name" href="#" onclick="return doclink('link-0', 'TftpShared', 'link-0');">TftpShared</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"> </tt> +<a name="TftpSession"></a><div id="TftpSession-def"><a name="L4"></a><tt class="py-lineno"> 4</tt> <a class="py-toggle" href="#" id="TftpSession-toggle" onclick="return toggle('TftpSession');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpSession-class.html">TftpSession</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpSession-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpSession-expanded"><a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"> <tt class="py-docstring">"""This class is the base class for the tftp client and server. Any shared</tt> </tt> +<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-docstring"> code should be in this class."""</tt> </tt> +<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: do we need this anymore?</tt> </tt> +<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">pass</tt> </tt> +</div><a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"> </tt> +<a name="TftpPacketWithOptions"></a><div id="TftpPacketWithOptions-def"><a name="L10"></a><tt class="py-lineno"> 10</tt> <a class="py-toggle" href="#" id="TftpPacketWithOptions-toggle" onclick="return toggle('TftpPacketWithOptions');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketWithOptions-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpPacketWithOptions-expanded"><a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"> <tt class="py-docstring">"""This class exists to permit some TftpPacket subclasses to share code</tt> </tt> +<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-docstring"> regarding options handling. It does not inherit from TftpPacket, as the</tt> </tt> +<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-docstring"> goal is just to share code here, and not cause diamond inheritance."""</tt> </tt> +<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"> </tt> +<a name="TftpPacketWithOptions.__init__"></a><div id="TftpPacketWithOptions.__init__-def"><a name="L15"></a><tt class="py-lineno"> 15</tt> <a class="py-toggle" href="#" id="TftpPacketWithOptions.__init__-toggle" onclick="return toggle('TftpPacketWithOptions.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketWithOptions.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketWithOptions.__init__-expanded"><a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Variable tftpy.TftpPacketTypes.TftpPacketWithOptions.options=tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-1', 'options', 'link-1');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt> +</div><a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> </tt> +<a name="TftpPacketWithOptions.setoptions"></a><div id="TftpPacketWithOptions.setoptions-def"><a name="L18"></a><tt class="py-lineno"> 18</tt> <a class="py-toggle" href="#" id="TftpPacketWithOptions.setoptions-toggle" onclick="return toggle('TftpPacketWithOptions.setoptions');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions">setoptions</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">options</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketWithOptions.setoptions-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketWithOptions.setoptions-expanded"><a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"> <tt id="link-2" class="py-name" targets="Variable tftpy.TftpClient'.log=tftpy.TftpClient%27-module.html#log,Variable tftpy.TftpPacketFactory'.log=tftpy.TftpPacketFactory%27-module.html#log,Variable tftpy.TftpServer'.log=tftpy.TftpServer%27-module.html#log,Variable tftpy.TftpShared.log=tftpy.TftpShared-module.html#log"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-2', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"in TftpPacketWithOptions.setoptions"</tt><tt class="py-op">)</tt> </tt> +<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"> <tt id="link-3" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-3', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"options: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-4" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-4', 'options', 'link-1');">options</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"> <tt class="py-name">myoptions</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt> +<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt id="link-5" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-5', 'options', 'link-1');">options</a></tt><tt class="py-op">:</tt> </tt> +<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"> <tt class="py-name">newkey</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"> <tt class="py-name">myoptions</tt><tt class="py-op">[</tt><tt class="py-name">newkey</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-6" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-6', 'options', 'link-1');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"> <tt id="link-7" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-7', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"populated myoptions with %s = %s"</tt> </tt> +<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">newkey</tt><tt class="py-op">,</tt> <tt class="py-name">myoptions</tt><tt class="py-op">[</tt><tt class="py-name">newkey</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"> </tt> +<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"> <tt id="link-8" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-8', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"setting options hash to: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">myoptions</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_options</tt> <tt class="py-op">=</tt> <tt class="py-name">myoptions</tt> </tt> +</div><a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"> </tt> +<a name="TftpPacketWithOptions.getoptions"></a><div id="TftpPacketWithOptions.getoptions-def"><a name="L31"></a><tt class="py-lineno"> 31</tt> <a class="py-toggle" href="#" id="TftpPacketWithOptions.getoptions-toggle" onclick="return toggle('TftpPacketWithOptions.getoptions');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions">getoptions</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketWithOptions.getoptions-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketWithOptions.getoptions-expanded"><a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> <tt id="link-9" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-9', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"in TftpPacketWithOptions.getoptions"</tt><tt class="py-op">)</tt> </tt> +<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_options</tt> </tt> +</div><a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt> +<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> <tt class="py-comment"># Set up getter and setter on options to ensure that they are the proper</tt> </tt> +<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># type. They should always be strings, but we don't need to force the</tt> </tt> +<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># client to necessarily enter strings if we can avoid it.</tt> </tt> +<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-10" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-10', 'options', 'link-1');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt id="link-11" class="py-name" targets="Method tftpy.TftpPacketTypes.TftpPacketWithOptions.getoptions()=tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.getoptions" class="py-name" href="#" onclick="return doclink('link-11', 'getoptions', 'link-11');">getoptions</a></tt><tt class="py-op">,</tt> <tt id="link-12" class="py-name" targets="Method tftpy.TftpPacketTypes.TftpPacketWithOptions.setoptions()=tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.setoptions" class="py-name" href="#" onclick="return doclink('link-12', 'setoptions', 'link-12');">setoptions</a></tt><tt class="py-op">)</tt> </tt> +<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"> </tt> +<a name="TftpPacketWithOptions.decode_options"></a><div id="TftpPacketWithOptions.decode_options-def"><a name="L40"></a><tt class="py-lineno"> 40</tt> <a class="py-toggle" href="#" id="TftpPacketWithOptions.decode_options-toggle" onclick="return toggle('TftpPacketWithOptions.decode_options');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options">decode_options</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">buffer</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketWithOptions.decode_options-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketWithOptions.decode_options-expanded"><a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> <tt class="py-docstring">"""This method decodes the section of the buffer that contains an</tt> </tt> +<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"> unknown number of options. It returns a dictionary of option names and</tt> </tt> +<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring"> values."""</tt> </tt> +<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> <tt class="py-name">nulls</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">=</tt> <tt class="py-string">"!"</tt> </tt> +<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt id="link-13" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-13', 'options', 'link-1');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt> +<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> </tt> +<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt id="link-14" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-14', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"decode_options: buffer is: "</tt> <tt class="py-op">+</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt id="link-15" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-15', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"size of buffer is %d bytes"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt id="link-16" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-16', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"size of buffer is zero, returning empty hash"</tt><tt class="py-op">)</tt> </tt> +<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt> +<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> </tt> +<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-comment"># Count the nulls in the buffer. Each one terminates a string.</tt> </tt> +<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-17" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-17', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"about to iterate options buffer counting nulls"</tt><tt class="py-op">)</tt> </tt> +<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-name">length</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">buffer</tt><tt class="py-op">:</tt> </tt> +<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-comment">#log.debug("iterating this byte: " + repr(c))</tt> </tt> +<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">ord</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt id="link-18" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-18', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"found a null at length %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">length</tt><tt class="py-op">)</tt> </tt> +<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">length</tt> <tt class="py-op">></tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%dsx"</tt> <tt class="py-op">%</tt> <tt class="py-name">length</tt> </tt> +<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-name">length</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt> +<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-19" class="py-name" targets="Class tftpy.TftpShared.TftpException=tftpy.TftpShared.TftpException-class.html"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-19', 'TftpException', 'link-19');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Invalid options in buffer"</tt> </tt> +<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-name">length</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt> +<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> </tt> +<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt id="link-20" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-20', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"about to unpack, format is: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt> +<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-name">mystruct</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt class="py-name">format</tt><tt class="py-op">,</tt> <tt class="py-name">buffer</tt><tt class="py-op">)</tt> </tt> +<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> </tt> +<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt id="link-21" class="py-name" targets="Function tftpy.TftpShared.tftpassert()=tftpy.TftpShared-module.html#tftpassert"><a title="tftpy.TftpShared.tftpassert" class="py-name" href="#" onclick="return doclink('link-21', 'tftpassert', 'link-21');">tftpassert</a></tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">mystruct</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-number">2</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> </tt> +<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-string">"packet with odd number of option/value pairs"</tt><tt class="py-op">)</tt> </tt> +<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt> +<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">mystruct</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt id="link-22" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-22', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"setting option %s to %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">mystruct</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">mystruct</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt id="link-23" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-23', 'options', 'link-1');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">mystruct</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">mystruct</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt> +<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> </tt> +<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-24" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-24', 'options', 'link-1');">options</a></tt> </tt> +</div></div><a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> </tt> +<a name="TftpPacket"></a><div id="TftpPacket-def"><a name="L80"></a><tt class="py-lineno"> 80</tt> <a class="py-toggle" href="#" id="TftpPacket-toggle" onclick="return toggle('TftpPacket');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacket-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpPacket-expanded"><a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-docstring">"""This class is the parent class of all tftp packet classes. It is an</tt> </tt> +<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> abstract class, providing an interface, and should not be instantiated</tt> </tt> +<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"><tt class="py-docstring"> directly."""</tt> </tt> +<a name="TftpPacket.__init__"></a><div id="TftpPacket.__init__-def"><a name="L84"></a><tt class="py-lineno"> 84</tt> <a class="py-toggle" href="#" id="TftpPacket.__init__-toggle" onclick="return toggle('TftpPacket.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacket-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacket.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacket.__init__-expanded"><a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +</div><a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> </tt> +<a name="TftpPacket.encode"></a><div id="TftpPacket.encode-def"><a name="L88"></a><tt class="py-lineno"> 88</tt> <a class="py-toggle" href="#" id="TftpPacket.encode-toggle" onclick="return toggle('TftpPacket.encode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacket-class.html#encode">encode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacket.encode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacket.encode-expanded"><a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-docstring">"""The encode method of a TftpPacket takes keyword arguments specific</tt> </tt> +<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"><tt class="py-docstring"> to the type of packet, and packs an appropriate buffer in network-byte</tt> </tt> +<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"><tt class="py-docstring"> order suitable for sending over the wire.</tt> </tt> +<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"><tt class="py-docstring"> This is an abstract method."""</tt> </tt> +<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">,</tt> <tt class="py-string">"Abstract method"</tt> </tt> +</div><a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> </tt> +<a name="TftpPacket.decode"></a><div id="TftpPacket.decode-def"><a name="L96"></a><tt class="py-lineno"> 96</tt> <a class="py-toggle" href="#" id="TftpPacket.decode-toggle" onclick="return toggle('TftpPacket.decode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacket-class.html#decode">decode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacket.decode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacket.decode-expanded"><a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-docstring">"""The decode method of a TftpPacket takes a buffer off of the wire in</tt> </tt> +<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"><tt class="py-docstring"> network-byte order, and decodes it, populating internal properties as</tt> </tt> +<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"><tt class="py-docstring"> appropriate. This can only be done once the first 2-byte opcode has</tt> </tt> +<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"><tt class="py-docstring"> already been decoded, but the data section does include the entire</tt> </tt> +<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"><tt class="py-docstring"> datagram.</tt> </tt> +<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"><tt class="py-docstring"> This is an abstract method."""</tt> </tt> +<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">,</tt> <tt class="py-string">"Abstract method"</tt> </tt> +</div></div><a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> </tt> +<a name="TftpPacketInitial"></a><div id="TftpPacketInitial-def"><a name="L106"></a><tt class="py-lineno">106</tt> <a class="py-toggle" href="#" id="TftpPacketInitial-toggle" onclick="return toggle('TftpPacketInitial');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">TftpPacketInitial</a><tt class="py-op">(</tt><tt class="py-base-class">TftpPacket</tt><tt class="py-op">,</tt> <tt class="py-base-class">TftpPacketWithOptions</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketInitial-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpPacketInitial-expanded"><a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-docstring">"""This class is a common parent class for the RRQ and WRQ packets, as</tt> </tt> +<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"><tt class="py-docstring"> they share quite a bit of code."""</tt> </tt> +<a name="TftpPacketInitial.__init__"></a><div id="TftpPacketInitial.__init__-def"><a name="L109"></a><tt class="py-lineno">109</tt> <a class="py-toggle" href="#" id="TftpPacketInitial.__init__-toggle" onclick="return toggle('TftpPacketInitial.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketInitial.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketInitial.__init__-expanded"><a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt id="link-25" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacket=tftpy.TftpPacketTypes.TftpPacket-class.html"><a title="tftpy.TftpPacketTypes.TftpPacket" class="py-name" href="#" onclick="return doclink('link-25', 'TftpPacket', 'link-25');">TftpPacket</a></tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Method tftpy.TftpClient'.TftpClient.__init__()=tftpy.TftpClient%27.TftpClient-class.html#__init__,Method tftpy.TftpPacketFactory'.TftpPacketFactory.__init__()=tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacket.__init__()=tftpy.TftpPacketTypes.TftpPacket-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketACK.__init__()=tftpy.TftpPacketTypes.TftpPacketACK-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketDAT.__init__()=tftpy.TftpPacketTypes.TftpPacketDAT-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketERR.__init__()=tftpy.TftpPacketTypes.TftpPacketERR-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketInitial.__init__()=tftpy.TftpPacketTypes.TftpPacketInitial-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketOACK.__init__()=tftpy.TftpPacketTypes.TftpPacketOACK-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketRRQ.__init__()=tftpy.TftpPacketTypes.TftpPacketRRQ-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketWRQ.__init__()=tftpy.TftpPacketTypes.TftpPacketWRQ-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__()=tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#__init__,Method tftpy.TftpServer'.TftpServer.__init__()=tftpy.TftpServer%27.TftpServer-class.html#__init__,Method tftpy.TftpStates.TftpContext.__init__()=tftpy.TftpStates.TftpContext-class.html#__init__,Method tftpy.TftpStates.TftpContextClientDownload.__init__()=tftpy.TftpStates.TftpContextClientDownload-class.html#__init__,Method tftpy.TftpStates.TftpContextClientUpload.__init__()=tftpy.TftpStates.TftpContextClientUpload-class.html#__init__,Method tftpy.TftpStates.TftpContextServer.__init__()=tftpy.TftpStates.TftpContextServer-class.html#__init__,Method tftpy.TftpStates.TftpMetrics.__init__()=tftpy.TftpStates.TftpMetrics-class.html#__init__,Method tftpy.TftpStates.TftpState.__init__()=tftpy.TftpStates.TftpState-class.html#__init__"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-26', '__init__', 'link-26');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt id="link-27" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketWithOptions=tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions" class="py-name" href="#" onclick="return doclink('link-27', 'TftpPacketWithOptions', 'link-27');">TftpPacketWithOptions</a></tt><tt class="py-op">.</tt><tt id="link-28" class="py-name"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-28', '__init__', 'link-26');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +</div><a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> </tt> +<a name="TftpPacketInitial.encode"></a><div id="TftpPacketInitial.encode-def"><a name="L115"></a><tt class="py-lineno">115</tt> <a class="py-toggle" href="#" id="TftpPacketInitial.encode-toggle" onclick="return toggle('TftpPacketInitial.encode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#encode">encode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketInitial.encode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketInitial.encode-expanded"><a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-docstring">"""Encode the packet's buffer from the instance variables."""</tt> </tt> +<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt id="link-29" class="py-name"><a title="tftpy.TftpShared.tftpassert" class="py-name" href="#" onclick="return doclink('link-29', 'tftpassert', 'link-21');">tftpassert</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-string">"filename required in initial packet"</tt><tt class="py-op">)</tt> </tt> +<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt id="link-30" class="py-name"><a title="tftpy.TftpShared.tftpassert" class="py-name" href="#" onclick="return doclink('link-30', 'tftpassert', 'link-21');">tftpassert</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt><tt class="py-op">,</tt> <tt class="py-string">"mode required in initial packet"</tt><tt class="py-op">)</tt> </tt> +<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> </tt> +<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-name">ptype</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> <tt class="py-name">ptype</tt> <tt class="py-op">=</tt> <tt class="py-string">"RRQ"</tt> </tt> +<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> <tt class="py-name">ptype</tt> <tt class="py-op">=</tt> <tt class="py-string">"WRQ"</tt> </tt> +<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt id="link-31" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-31', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Encoding %s packet, filename = %s, mode = %s"</tt> </tt> +<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">ptype</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-32', 'options', 'link-1');">options</a></tt><tt class="py-op">:</tt> </tt> +<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt id="link-33" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-33', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">" Option %s = %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-34', 'options', 'link-1');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> </tt> +<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">=</tt> <tt class="py-string">"!H"</tt> </tt> +<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%dsx"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt> </tt> +<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt> <tt class="py-op">==</tt> <tt class="py-string">"octet"</tt><tt class="py-op">:</tt> </tt> +<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">+=</tt> <tt class="py-string">"5sx"</tt> </tt> +<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">AssertionError</tt><tt class="py-op">,</tt> <tt class="py-string">"Unsupported mode: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">mode</tt> </tt> +<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-comment"># Add options.</tt> </tt> +<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">options_list</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt> +<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-35', 'options', 'link-1');">options</a></tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">></tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt id="link-36" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-36', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"there are options to encode"</tt><tt class="py-op">)</tt> </tt> +<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-37', 'options', 'link-1');">options</a></tt><tt class="py-op">:</tt> </tt> +<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-comment"># Populate the option name</tt> </tt> +<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">format</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%dsx"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-name">options_list</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-comment"># Populate the option value</tt> </tt> +<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">format</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%dsx"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-38', 'options', 'link-1');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-name">options_list</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-39', 'options', 'link-1');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> </tt> +<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt id="link-40" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-40', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"format is %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt> +<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt id="link-41" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-41', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"options_list is %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">options_list</tt><tt class="py-op">)</tt> </tt> +<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt id="link-42" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-42', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"size of struct is %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">calcsize</tt><tt class="py-op">(</tt><tt class="py-name">format</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> </tt> +<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt class="py-name">format</tt><tt class="py-op">,</tt> </tt> +<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt><tt class="py-op">,</tt> </tt> +<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> </tt> +<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt><tt class="py-op">,</tt> </tt> +<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-op">*</tt><tt class="py-name">options_list</tt><tt class="py-op">)</tt> </tt> +<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> </tt> +<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt id="link-43" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-43', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"buffer is "</tt> <tt class="py-op">+</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div><a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> </tt> +<a name="TftpPacketInitial.decode"></a><div id="TftpPacketInitial.decode-def"><a name="L159"></a><tt class="py-lineno">159</tt> <a class="py-toggle" href="#" id="TftpPacketInitial.decode-toggle" onclick="return toggle('TftpPacketInitial.decode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#decode">decode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketInitial.decode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketInitial.decode-expanded"><a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt id="link-44" class="py-name"><a title="tftpy.TftpShared.tftpassert" class="py-name" href="#" onclick="return doclink('link-44', 'tftpassert', 'link-21');">tftpassert</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">,</tt> <tt class="py-string">"Can't decode, buffer is empty"</tt><tt class="py-op">)</tt> </tt> +<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> </tt> +<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-comment"># FIXME - this shares a lot of code with decode_options</tt> </tt> +<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">nulls</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">=</tt> <tt class="py-string">""</tt> </tt> +<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-name">nulls</tt> <tt class="py-op">=</tt> <tt class="py-name">length</tt> <tt class="py-op">=</tt> <tt class="py-name">tlength</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt id="link-45" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-45', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"in decode: about to iterate buffer counting nulls"</tt><tt class="py-op">)</tt> </tt> +<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-name">subbuf</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt> +<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">subbuf</tt><tt class="py-op">:</tt> </tt> +<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt id="link-46" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-46', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"iterating this byte: "</tt> <tt class="py-op">+</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ord</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-name">nulls</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt> +<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt id="link-47" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-47', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"found a null at length %d, now have %d"</tt> </tt> +<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">length</tt><tt class="py-op">,</tt> <tt class="py-name">nulls</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%dsx"</tt> <tt class="py-op">%</tt> <tt class="py-name">length</tt> </tt> +<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-name">length</tt> <tt class="py-op">=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> </tt> +<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-comment"># At 2 nulls, we want to mark that position for decoding.</tt> </tt> +<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">nulls</tt> <tt class="py-op">==</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt> +<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt> +<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-name">length</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt> +<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-name">tlength</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt> +<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> </tt> +<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt id="link-48" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-48', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"hopefully found end of mode at length %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">tlength</tt><tt class="py-op">)</tt> </tt> +<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> <tt class="py-comment"># length should now be the end of the mode.</tt> </tt> +<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-49" class="py-name"><a title="tftpy.TftpShared.tftpassert" class="py-name" href="#" onclick="return doclink('link-49', 'tftpassert', 'link-21');">tftpassert</a></tt><tt class="py-op">(</tt><tt class="py-name">nulls</tt> <tt class="py-op">==</tt> <tt class="py-number">2</tt><tt class="py-op">,</tt> <tt class="py-string">"malformed packet"</tt><tt class="py-op">)</tt> </tt> +<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-name">shortbuf</tt> <tt class="py-op">=</tt> <tt class="py-name">subbuf</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-name">tlength</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt> +<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt id="link-50" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-50', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"about to unpack buffer with format: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt> +<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt id="link-51" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-51', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"unpacking buffer: "</tt> <tt class="py-op">+</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt class="py-name">shortbuf</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">mystruct</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt class="py-name">format</tt><tt class="py-op">,</tt> <tt class="py-name">shortbuf</tt><tt class="py-op">)</tt> </tt> +<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> </tt> +<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt id="link-52" class="py-name"><a title="tftpy.TftpShared.tftpassert" class="py-name" href="#" onclick="return doclink('link-52', 'tftpassert', 'link-21');">tftpassert</a></tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">mystruct</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">2</tt><tt class="py-op">,</tt> <tt class="py-string">"malformed packet"</tt><tt class="py-op">)</tt> </tt> +<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt id="link-53" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-53', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"setting filename to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">mystruct</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt id="link-54" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-54', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"setting mode to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">mystruct</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt> <tt class="py-op">=</tt> <tt class="py-name">mystruct</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt> +<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt> <tt class="py-op">=</tt> <tt class="py-name">mystruct</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt> +<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> </tt> +<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-55', 'options', 'link-1');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name" targets="Method tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options()=tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options" class="py-name" href="#" onclick="return doclink('link-56', 'decode_options', 'link-56');">decode_options</a></tt><tt class="py-op">(</tt><tt class="py-name">subbuf</tt><tt class="py-op">[</tt><tt class="py-name">tlength</tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div></div><a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> </tt> +<a name="TftpPacketRRQ"></a><div id="TftpPacketRRQ-def"><a name="L199"></a><tt class="py-lineno">199</tt> <a class="py-toggle" href="#" id="TftpPacketRRQ-toggle" onclick="return toggle('TftpPacketRRQ');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html">TftpPacketRRQ</a><tt class="py-op">(</tt><tt class="py-base-class">TftpPacketInitial</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketRRQ-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpPacketRRQ-expanded"><a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt> +<a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"><tt class="py-docstring"> 2 bytes string 1 byte string 1 byte</tt> </tt> +<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"><tt class="py-docstring"> -----------------------------------------------</tt> </tt> +<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"><tt class="py-docstring">RRQ/ | 01/02 | Filename | 0 | Mode | 0 |</tt> </tt> +<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"><tt class="py-docstring">WRQ -----------------------------------------------</tt> </tt> +<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="TftpPacketRRQ.__init__"></a><div id="TftpPacketRRQ.__init__-def"><a name="L206"></a><tt class="py-lineno">206</tt> <a class="py-toggle" href="#" id="TftpPacketRRQ.__init__-toggle" onclick="return toggle('TftpPacketRRQ.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketRRQ.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketRRQ.__init__-expanded"><a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt id="link-57" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketInitial=tftpy.TftpPacketTypes.TftpPacketInitial-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketInitial" class="py-name" href="#" onclick="return doclink('link-57', 'TftpPacketInitial', 'link-57');">TftpPacketInitial</a></tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-58', '__init__', 'link-26');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt> +</div><a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> </tt> +<a name="TftpPacketRRQ.__str__"></a><div id="TftpPacketRRQ.__str__-def"><a name="L210"></a><tt class="py-lineno">210</tt> <a class="py-toggle" href="#" id="TftpPacketRRQ.__str__-toggle" onclick="return toggle('TftpPacketRRQ.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketRRQ.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketRRQ.__str__-expanded"><a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-string">'RRQ packet: filename = %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt> </tt> +<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">' mode = %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt> </tt> +<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-59', 'options', 'link-1');">options</a></tt><tt class="py-op">:</tt> </tt> +<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">'\n options = %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-60', 'options', 'link-1');">options</a></tt> </tt> +<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">s</tt> </tt> +</div></div><a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> </tt> +<a name="TftpPacketWRQ"></a><div id="TftpPacketWRQ-def"><a name="L217"></a><tt class="py-lineno">217</tt> <a class="py-toggle" href="#" id="TftpPacketWRQ-toggle" onclick="return toggle('TftpPacketWRQ');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html">TftpPacketWRQ</a><tt class="py-op">(</tt><tt class="py-base-class">TftpPacketInitial</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketWRQ-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpPacketWRQ-expanded"><a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt> +<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"><tt class="py-docstring"> 2 bytes string 1 byte string 1 byte</tt> </tt> +<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"><tt class="py-docstring"> -----------------------------------------------</tt> </tt> +<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"><tt class="py-docstring">RRQ/ | 01/02 | Filename | 0 | Mode | 0 |</tt> </tt> +<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"><tt class="py-docstring">WRQ -----------------------------------------------</tt> </tt> +<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="TftpPacketWRQ.__init__"></a><div id="TftpPacketWRQ.__init__-def"><a name="L224"></a><tt class="py-lineno">224</tt> <a class="py-toggle" href="#" id="TftpPacketWRQ.__init__-toggle" onclick="return toggle('TftpPacketWRQ.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketWRQ.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketWRQ.__init__-expanded"><a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt id="link-61" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketInitial" class="py-name" href="#" onclick="return doclink('link-61', 'TftpPacketInitial', 'link-57');">TftpPacketInitial</a></tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-62', '__init__', 'link-26');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> </tt> +</div><a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> </tt> +<a name="TftpPacketWRQ.__str__"></a><div id="TftpPacketWRQ.__str__-def"><a name="L228"></a><tt class="py-lineno">228</tt> <a class="py-toggle" href="#" id="TftpPacketWRQ.__str__-toggle" onclick="return toggle('TftpPacketWRQ.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketWRQ.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketWRQ.__str__-expanded"><a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-string">'WRQ packet: filename = %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt> </tt> +<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">' mode = %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt> </tt> +<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-63', 'options', 'link-1');">options</a></tt><tt class="py-op">:</tt> </tt> +<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">'\n options = %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-64', 'options', 'link-1');">options</a></tt> </tt> +<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">s</tt> </tt> +</div></div><a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> </tt> +<a name="TftpPacketDAT"></a><div id="TftpPacketDAT-def"><a name="L235"></a><tt class="py-lineno">235</tt> <a class="py-toggle" href="#" id="TftpPacketDAT-toggle" onclick="return toggle('TftpPacketDAT');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html">TftpPacketDAT</a><tt class="py-op">(</tt><tt class="py-base-class">TftpPacket</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketDAT-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpPacketDAT-expanded"><a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt> +<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"><tt class="py-docstring"> 2 bytes 2 bytes n bytes</tt> </tt> +<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"><tt class="py-docstring"> ---------------------------------</tt> </tt> +<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"><tt class="py-docstring">DATA | 03 | Block # | Data |</tt> </tt> +<a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"><tt class="py-docstring"> ---------------------------------</tt> </tt> +<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="TftpPacketDAT.__init__"></a><div id="TftpPacketDAT.__init__-def"><a name="L242"></a><tt class="py-lineno">242</tt> <a class="py-toggle" href="#" id="TftpPacketDAT.__init__-toggle" onclick="return toggle('TftpPacketDAT.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketDAT.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketDAT.__init__-expanded"><a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt id="link-65" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacket" class="py-name" href="#" onclick="return doclink('link-65', 'TftpPacket', 'link-25');">TftpPacket</a></tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-66', '__init__', 'link-26');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt> <tt class="py-op">=</tt> <tt class="py-number">3</tt> </tt> +<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +</div><a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> </tt> +<a name="TftpPacketDAT.__str__"></a><div id="TftpPacketDAT.__str__-def"><a name="L248"></a><tt class="py-lineno">248</tt> <a class="py-toggle" href="#" id="TftpPacketDAT.__str__-toggle" onclick="return toggle('TftpPacketDAT.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketDAT.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketDAT.__str__-expanded"><a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-string">'DAT packet: block %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> </tt> +<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">:</tt> </tt> +<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">'\n data: %d bytes'</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt> +<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">s</tt> </tt> +</div><a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> </tt> +<a name="TftpPacketDAT.encode"></a><div id="TftpPacketDAT.encode-def"><a name="L254"></a><tt class="py-lineno">254</tt> <a class="py-toggle" href="#" id="TftpPacketDAT.encode-toggle" onclick="return toggle('TftpPacketDAT.encode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#encode">encode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketDAT.encode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketDAT.encode-expanded"><a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-docstring">"""Encode the DAT packet. This method populates self.buffer, and</tt> </tt> +<a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"><tt class="py-docstring"> returns self for easy method chaining."""</tt> </tt> +<a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt id="link-67" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-67', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Encoding an empty DAT packet"</tt><tt class="py-op">)</tt> </tt> +<a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">=</tt> <tt class="py-string">"!HH%ds"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt> +<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt class="py-name">format</tt><tt class="py-op">,</tt> </tt> +<a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt><tt class="py-op">,</tt> </tt> +<a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">,</tt> </tt> +<a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt> +<a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div><a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> </tt> +<a name="TftpPacketDAT.decode"></a><div id="TftpPacketDAT.decode-def"><a name="L266"></a><tt class="py-lineno">266</tt> <a class="py-toggle" href="#" id="TftpPacketDAT.decode-toggle" onclick="return toggle('TftpPacketDAT.decode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#decode">decode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketDAT.decode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketDAT.decode-expanded"><a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-docstring">"""Decode self.buffer into instance variables. It returns self for</tt> </tt> +<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"><tt class="py-docstring"> easy method chaining."""</tt> </tt> +<a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-comment"># We know the first 2 bytes are the opcode. The second two are the</tt> </tt> +<a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># block number.</tt> </tt> +<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">,</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt class="py-string">"!H"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> <tt id="link-68" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-68', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"decoding DAT packet, block number %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt id="link-69" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-69', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"should be %d bytes in the packet total"</tt> </tt> +<a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt class="py-comment"># Everything else is data.</tt> </tt> +<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt> +<a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt id="link-70" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-70', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"found %d bytes of data"</tt> </tt> +<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div></div><a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> </tt> +<a name="TftpPacketACK"></a><div id="TftpPacketACK-def"><a name="L281"></a><tt class="py-lineno">281</tt> <a class="py-toggle" href="#" id="TftpPacketACK-toggle" onclick="return toggle('TftpPacketACK');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketACK-class.html">TftpPacketACK</a><tt class="py-op">(</tt><tt class="py-base-class">TftpPacket</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketACK-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpPacketACK-expanded"><a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt> +<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"><tt class="py-docstring"> 2 bytes 2 bytes</tt> </tt> +<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"><tt class="py-docstring"> -------------------</tt> </tt> +<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"><tt class="py-docstring">ACK | 04 | Block # |</tt> </tt> +<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"><tt class="py-docstring"> --------------------</tt> </tt> +<a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="TftpPacketACK.__init__"></a><div id="TftpPacketACK.__init__-def"><a name="L288"></a><tt class="py-lineno">288</tt> <a class="py-toggle" href="#" id="TftpPacketACK.__init__-toggle" onclick="return toggle('TftpPacketACK.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketACK.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketACK.__init__-expanded"><a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> <tt id="link-71" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacket" class="py-name" href="#" onclick="return doclink('link-71', 'TftpPacket', 'link-25');">TftpPacket</a></tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-72', '__init__', 'link-26');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt> <tt class="py-op">=</tt> <tt class="py-number">4</tt> </tt> +<a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +</div><a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> </tt> +<a name="TftpPacketACK.__str__"></a><div id="TftpPacketACK.__str__-def"><a name="L293"></a><tt class="py-lineno">293</tt> <a class="py-toggle" href="#" id="TftpPacketACK.__str__-toggle" onclick="return toggle('TftpPacketACK.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketACK.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketACK.__str__-expanded"><a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'ACK packet: block %d'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> </tt> +</div><a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> </tt> +<a name="TftpPacketACK.encode"></a><div id="TftpPacketACK.encode-def"><a name="L296"></a><tt class="py-lineno">296</tt> <a class="py-toggle" href="#" id="TftpPacketACK.encode-toggle" onclick="return toggle('TftpPacketACK.encode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#encode">encode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketACK.encode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketACK.encode-expanded"><a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt id="link-73" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-73', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"encoding ACK: opcode = %d, block = %d"</tt> </tt> +<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt class="py-string">"!HH"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div><a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> </tt> +<a name="TftpPacketACK.decode"></a><div id="TftpPacketACK.decode-def"><a name="L302"></a><tt class="py-lineno">302</tt> <a class="py-toggle" href="#" id="TftpPacketACK.decode-toggle" onclick="return toggle('TftpPacketACK.decode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#decode">decode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketACK.decode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketACK.decode-expanded"><a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt class="py-string">"!HH"</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt> </tt> +<a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt id="link-74" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-74', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"decoded ACK packet: opcode = %d, block = %d"</tt> </tt> +<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div></div><a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> </tt> +<a name="TftpPacketERR"></a><div id="TftpPacketERR-def"><a name="L308"></a><tt class="py-lineno">308</tt> <a class="py-toggle" href="#" id="TftpPacketERR-toggle" onclick="return toggle('TftpPacketERR');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketERR-class.html">TftpPacketERR</a><tt class="py-op">(</tt><tt class="py-base-class">TftpPacket</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketERR-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpPacketERR-expanded"><a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt> +<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"><tt class="py-docstring"> 2 bytes 2 bytes string 1 byte</tt> </tt> +<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"><tt class="py-docstring"> ----------------------------------------</tt> </tt> +<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"><tt class="py-docstring">ERROR | 05 | ErrorCode | ErrMsg | 0 |</tt> </tt> +<a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"><tt class="py-docstring"> ----------------------------------------</tt> </tt> +<a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"><tt class="py-docstring"> Error Codes</tt> </tt> +<a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"><tt class="py-docstring"> Value Meaning</tt> </tt> +<a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt> +<a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"><tt class="py-docstring"> 0 Not defined, see error message (if any).</tt> </tt> +<a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"><tt class="py-docstring"> 1 File not found.</tt> </tt> +<a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"><tt class="py-docstring"> 2 Access violation.</tt> </tt> +<a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"><tt class="py-docstring"> 3 Disk full or allocation exceeded.</tt> </tt> +<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"><tt class="py-docstring"> 4 Illegal TFTP operation.</tt> </tt> +<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"><tt class="py-docstring"> 5 Unknown transfer ID.</tt> </tt> +<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"><tt class="py-docstring"> 6 File already exists.</tt> </tt> +<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"><tt class="py-docstring"> 7 No such user.</tt> </tt> +<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"><tt class="py-docstring"> 8 Failed to negotiate options</tt> </tt> +<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="TftpPacketERR.__init__"></a><div id="TftpPacketERR.__init__-def"><a name="L328"></a><tt class="py-lineno">328</tt> <a class="py-toggle" href="#" id="TftpPacketERR.__init__-toggle" onclick="return toggle('TftpPacketERR.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketERR.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketERR.__init__-expanded"><a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt id="link-75" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacket" class="py-name" href="#" onclick="return doclink('link-75', 'TftpPacket', 'link-25');">TftpPacket</a></tt><tt class="py-op">.</tt><tt id="link-76" class="py-name"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-76', '__init__', 'link-26');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt> <tt class="py-op">=</tt> <tt class="py-number">5</tt> </tt> +<a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errorcode</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: We don't encode the errmsg...</tt> </tt> +<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errmsg</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-comment"># FIXME - integrate in TftpErrors references?</tt> </tt> +<a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errmsgs</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt> +<a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"> <tt class="py-number">1</tt><tt class="py-op">:</tt> <tt class="py-string">"File not found"</tt><tt class="py-op">,</tt> </tt> +<a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-number">2</tt><tt class="py-op">:</tt> <tt class="py-string">"Access violation"</tt><tt class="py-op">,</tt> </tt> +<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-number">3</tt><tt class="py-op">:</tt> <tt class="py-string">"Disk full or allocation exceeded"</tt><tt class="py-op">,</tt> </tt> +<a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt class="py-number">4</tt><tt class="py-op">:</tt> <tt class="py-string">"Illegal TFTP operation"</tt><tt class="py-op">,</tt> </tt> +<a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> <tt class="py-number">5</tt><tt class="py-op">:</tt> <tt class="py-string">"Unknown transfer ID"</tt><tt class="py-op">,</tt> </tt> +<a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> <tt class="py-number">6</tt><tt class="py-op">:</tt> <tt class="py-string">"File already exists"</tt><tt class="py-op">,</tt> </tt> +<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt class="py-number">7</tt><tt class="py-op">:</tt> <tt class="py-string">"No such user"</tt><tt class="py-op">,</tt> </tt> +<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt class="py-number">8</tt><tt class="py-op">:</tt> <tt class="py-string">"Failed to negotiate options"</tt> </tt> +<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt class="py-op">}</tt> </tt> +</div><a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> </tt> +<a name="TftpPacketERR.__str__"></a><div id="TftpPacketERR.__str__-def"><a name="L346"></a><tt class="py-lineno">346</tt> <a class="py-toggle" href="#" id="TftpPacketERR.__str__-toggle" onclick="return toggle('TftpPacketERR.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketERR.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketERR.__str__-expanded"><a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">=</tt> <tt class="py-string">'ERR packet: errorcode = %d'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errorcode</tt> </tt> +<a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> <tt class="py-name">s</tt> <tt class="py-op">+=</tt> <tt class="py-string">'\n msg = %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errmsgs</tt><tt class="py-op">.</tt><tt class="py-name">get</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errorcode</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt> +<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">s</tt> </tt> +</div><a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> </tt> +<a name="TftpPacketERR.encode"></a><div id="TftpPacketERR.encode-def"><a name="L351"></a><tt class="py-lineno">351</tt> <a class="py-toggle" href="#" id="TftpPacketERR.encode-toggle" onclick="return toggle('TftpPacketERR.encode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#encode">encode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketERR.encode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketERR.encode-expanded"><a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt class="py-docstring">"""Encode the DAT packet based on instance variables, populating</tt> </tt> +<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"><tt class="py-docstring"> self.buffer, returning self."""</tt> </tt> +<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">=</tt> <tt class="py-string">"!HH%dsx"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errmsgs</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errorcode</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> <tt id="link-77" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-77', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"encoding ERR packet with format %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt> +<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt class="py-name">format</tt><tt class="py-op">,</tt> </tt> +<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt><tt class="py-op">,</tt> </tt> +<a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errorcode</tt><tt class="py-op">,</tt> </tt> +<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errmsgs</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errorcode</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div><a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> </tt> +<a name="TftpPacketERR.decode"></a><div id="TftpPacketERR.decode-def"><a name="L362"></a><tt class="py-lineno">362</tt> <a class="py-toggle" href="#" id="TftpPacketERR.decode-toggle" onclick="return toggle('TftpPacketERR.decode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#decode">decode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketERR.decode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketERR.decode-expanded"><a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-docstring">"Decode self.buffer, populating instance variables and return self."</tt> </tt> +<a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-name">buflen</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt> </tt> +<a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> <tt id="link-78" class="py-name"><a title="tftpy.TftpShared.tftpassert" class="py-name" href="#" onclick="return doclink('link-78', 'tftpassert', 'link-21');">tftpassert</a></tt><tt class="py-op">(</tt><tt class="py-name">buflen</tt> <tt class="py-op">>=</tt> <tt class="py-number">4</tt><tt class="py-op">,</tt> <tt class="py-string">"malformed ERR packet, too short"</tt><tt class="py-op">)</tt> </tt> +<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> <tt id="link-79" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-79', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Decoding ERR packet, length %s bytes"</tt> <tt class="py-op">%</tt> <tt class="py-name">buflen</tt><tt class="py-op">)</tt> </tt> +<a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">buflen</tt> <tt class="py-op">==</tt> <tt class="py-number">4</tt><tt class="py-op">:</tt> </tt> +<a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"> <tt id="link-80" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-80', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Allowing this affront to the RFC of a 4-byte packet"</tt><tt class="py-op">)</tt> </tt> +<a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">=</tt> <tt class="py-string">"!HH"</tt> </tt> +<a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> <tt id="link-81" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-81', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Decoding ERR packet with format: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt> +<a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errorcode</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt class="py-name">format</tt><tt class="py-op">,</tt> </tt> +<a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt> </tt> +<a name="L373"></a><tt class="py-lineno">373</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt id="link-82" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-82', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Good ERR packet > 4 bytes"</tt><tt class="py-op">)</tt> </tt> +<a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">=</tt> <tt class="py-string">"!HH%dsx"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">5</tt><tt class="py-op">)</tt> </tt> +<a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"> <tt id="link-83" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-83', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Decoding ERR packet with format: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">format</tt><tt class="py-op">)</tt> </tt> +<a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errorcode</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errmsg</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt class="py-name">format</tt><tt class="py-op">,</tt> </tt> +<a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt> </tt> +<a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> <tt id="link-84" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-84', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"ERR packet - errorcode: %d, message: %s"</tt> </tt> +<a name="L380"></a><tt class="py-lineno">380</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errorcode</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errmsg</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div></div><a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> </tt> +<a name="TftpPacketOACK"></a><div id="TftpPacketOACK-def"><a name="L383"></a><tt class="py-lineno">383</tt> <a class="py-toggle" href="#" id="TftpPacketOACK-toggle" onclick="return toggle('TftpPacketOACK');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html">TftpPacketOACK</a><tt class="py-op">(</tt><tt class="py-base-class">TftpPacket</tt><tt class="py-op">,</tt> <tt class="py-base-class">TftpPacketWithOptions</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketOACK-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpPacketOACK-expanded"><a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt> +<a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"><tt class="py-docstring"> # +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+</tt> </tt> +<a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"><tt class="py-docstring"> # | opc | opt1 | 0 | value1 | 0 | optN | 0 | valueN | 0 |</tt> </tt> +<a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"><tt class="py-docstring"> # +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+</tt> </tt> +<a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt> +<a name="TftpPacketOACK.__init__"></a><div id="TftpPacketOACK.__init__-def"><a name="L389"></a><tt class="py-lineno">389</tt> <a class="py-toggle" href="#" id="TftpPacketOACK.__init__-toggle" onclick="return toggle('TftpPacketOACK.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketOACK.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketOACK.__init__-expanded"><a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt id="link-85" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacket" class="py-name" href="#" onclick="return doclink('link-85', 'TftpPacket', 'link-25');">TftpPacket</a></tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-86', '__init__', 'link-26');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt id="link-87" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions" class="py-name" href="#" onclick="return doclink('link-87', 'TftpPacketWithOptions', 'link-27');">TftpPacketWithOptions</a></tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-88', '__init__', 'link-26');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt> <tt class="py-op">=</tt> <tt class="py-number">6</tt> </tt> +</div><a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> </tt> +<a name="TftpPacketOACK.__str__"></a><div id="TftpPacketOACK.__str__-def"><a name="L394"></a><tt class="py-lineno">394</tt> <a class="py-toggle" href="#" id="TftpPacketOACK.__str__-toggle" onclick="return toggle('TftpPacketOACK.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketOACK.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketOACK.__str__-expanded"><a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'OACK packet:\n options = %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-89', 'options', 'link-1');">options</a></tt> </tt> +</div><a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"> </tt> +<a name="TftpPacketOACK.encode"></a><div id="TftpPacketOACK.encode-def"><a name="L397"></a><tt class="py-lineno">397</tt> <a class="py-toggle" href="#" id="TftpPacketOACK.encode-toggle" onclick="return toggle('TftpPacketOACK.encode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#encode">encode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketOACK.encode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketOACK.encode-expanded"><a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">=</tt> <tt class="py-string">"!H"</tt> <tt class="py-comment"># opcode</tt> </tt> +<a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"> <tt class="py-name">options_list</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt> +<a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"> <tt id="link-90" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-90', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"in TftpPacketOACK.encode"</tt><tt class="py-op">)</tt> </tt> +<a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-91', 'options', 'link-1');">options</a></tt><tt class="py-op">:</tt> </tt> +<a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"> <tt id="link-92" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-92', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"looping on option key %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> <tt id="link-93" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-93', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"value is %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-94', 'options', 'link-1');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%dsx"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"> <tt class="py-name">format</tt> <tt class="py-op">+=</tt> <tt class="py-string">"%dsx"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-95', 'options', 'link-1');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> <tt class="py-name">options_list</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> <tt class="py-name">options_list</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-96', 'options', 'link-1');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt class="py-name">format</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">opcode</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">options_list</tt><tt class="py-op">)</tt> </tt> +<a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div><a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> </tt> +<a name="TftpPacketOACK.decode"></a><div id="TftpPacketOACK.decode-def"><a name="L411"></a><tt class="py-lineno">411</tt> <a class="py-toggle" href="#" id="TftpPacketOACK.decode-toggle" onclick="return toggle('TftpPacketOACK.decode');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#decode">decode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketOACK.decode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketOACK.decode-expanded"><a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-97" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-97', 'options', 'link-1');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options" class="py-name" href="#" onclick="return doclink('link-98', 'decode_options', 'link-56');">decode_options</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div><a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> </tt> +<a name="TftpPacketOACK.match_options"></a><div id="TftpPacketOACK.match_options-def"><a name="L415"></a><tt class="py-lineno">415</tt> <a class="py-toggle" href="#" id="TftpPacketOACK.match_options-toggle" onclick="return toggle('TftpPacketOACK.match_options');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#match_options">match_options</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">options</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpPacketOACK.match_options-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpPacketOACK.match_options-expanded"><a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> <tt class="py-docstring">"""This method takes a set of options, and tries to match them with</tt> </tt> +<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"><tt class="py-docstring"> its own. It can accept some changes in those options from the server as</tt> </tt> +<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"><tt class="py-docstring"> part of a negotiation. Changed or unchanged, it will return a dict of</tt> </tt> +<a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"><tt class="py-docstring"> the options so that the session can update itself to the negotiated</tt> </tt> +<a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"><tt class="py-docstring"> options."""</tt> </tt> +<a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-99', 'options', 'link-1');">options</a></tt><tt class="py-op">:</tt> </tt> +<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-100" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-100', 'options', 'link-1');">options</a></tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-op">==</tt> <tt class="py-string">'blksize'</tt><tt class="py-op">:</tt> </tt> +<a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-comment"># We can accept anything between the min and max values.</tt> </tt> +<a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">size</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-101', 'options', 'link-1');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt> +<a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">size</tt> <tt class="py-op">>=</tt> <tt id="link-102" class="py-name" targets="Variable tftpy.TftpClient'.MIN_BLKSIZE=tftpy.TftpClient%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpPacketFactory'.MIN_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpServer'.MIN_BLKSIZE=tftpy.TftpServer%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpShared.MIN_BLKSIZE=tftpy.TftpShared-module.html#MIN_BLKSIZE"><a title="tftpy.TftpClient'.MIN_BLKSIZE +tftpy.TftpPacketFactory'.MIN_BLKSIZE +tftpy.TftpServer'.MIN_BLKSIZE +tftpy.TftpShared.MIN_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-102', 'MIN_BLKSIZE', 'link-102');">MIN_BLKSIZE</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">size</tt> <tt class="py-op"><=</tt> <tt id="link-103" class="py-name" targets="Variable tftpy.TftpClient'.MAX_BLKSIZE=tftpy.TftpClient%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpPacketFactory'.MAX_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpServer'.MAX_BLKSIZE=tftpy.TftpServer%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpShared.MAX_BLKSIZE=tftpy.TftpShared-module.html#MAX_BLKSIZE"><a title="tftpy.TftpClient'.MAX_BLKSIZE +tftpy.TftpPacketFactory'.MAX_BLKSIZE +tftpy.TftpServer'.MAX_BLKSIZE +tftpy.TftpShared.MAX_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-103', 'MAX_BLKSIZE', 'link-103');">MAX_BLKSIZE</a></tt><tt class="py-op">:</tt> </tt> +<a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt id="link-104" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-104', 'log', 'link-2');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"negotiated blksize of %d bytes"</tt> <tt class="py-op">%</tt> <tt class="py-name">size</tt><tt class="py-op">)</tt> </tt> +<a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> <tt id="link-105" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-105', 'options', 'link-1');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">blksize</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">size</tt> </tt> +<a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-106" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-106', 'TftpException', 'link-19');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Unsupported option: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt> </tt> +<a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt> +</div></div><a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"> </tt><script type="text/javascript"> +<!-- +expandto(location.href); +// --> +</script> +</pre> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:22 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacket-class.html b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacket-class.html new file mode 100644 index 0000000..8e3af49 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacket-class.html @@ -0,0 +1,325 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes.TftpPacket</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpPacketTypes-module.html">Module TftpPacketTypes</a> :: + Class TftpPacket + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes.TftpPacket-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpPacket</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacket">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <strong class="uidshort">TftpPacket</strong> +</pre> + +<dl><dt>Known Subclasses:</dt> +<dd> + <ul class="subclass-list"> +<li><a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html">TftpPacketACK</a></li><li>, <a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html">TftpPacketDAT</a></li><li>, <a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html">TftpPacketERR</a></li><li>, <a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">TftpPacketInitial</a></li><li>, <a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html">TftpPacketOACK</a></li> </ul> +</dd></dl> + +<hr /> +<p>This class is the parent class of all tftp packet classes. It is an + abstract class, providing an interface, and should not be instantiated + directly.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacket-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacket.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacket-class.html#encode" class="summary-sig-name">encode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + The encode method of a TftpPacket takes keyword arguments specific to + the type of packet, and packs an appropriate buffer in network-byte + order suitable for sending over the wire.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacket.encode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacket-class.html#decode" class="summary-sig-name">decode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + The decode method of a TftpPacket takes a buffer off of the wire in + network-byte order, and decodes it, populating internal properties as + appropriate.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacket.decode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacket.__init__">source code</a></span> + </td> + </tr></table> + + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="encode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">encode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacket.encode">source code</a></span> + </td> + </tr></table> + + <p>The encode method of a TftpPacket takes keyword arguments specific to + the type of packet, and packs an appropriate buffer in network-byte order + suitable for sending over the wire.</p> + <p>This is an abstract method.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<a name="decode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">decode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacket.decode">source code</a></span> + </td> + </tr></table> + + <p>The decode method of a TftpPacket takes a buffer off of the wire in + network-byte order, and decodes it, populating internal properties as + appropriate. This can only be done once the first 2-byte opcode has + already been decoded, but the data section does include the entire + datagram.</p> + <p>This is an abstract method.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketACK-class.html b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketACK-class.html new file mode 100644 index 0000000..053d14f --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketACK-class.html @@ -0,0 +1,375 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes.TftpPacketACK</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpPacketTypes-module.html">Module TftpPacketTypes</a> :: + Class TftpPacketACK + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpPacketACK</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketACK">source code</a></span></p> +<pre class="base-tree"> +object --+ + | +<a href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a> --+ + | + <strong class="uidshort">TftpPacketACK</strong> +</pre> + +<hr /> +<pre class="literalblock"> + + 2 bytes 2 bytes + ------------------- +ACK | 04 | Block # | + -------------------- + + +</pre> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketACK.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + str(x)</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketACK.__str__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#encode" class="summary-sig-name">encode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + The encode method of a TftpPacket takes keyword arguments specific to + the type of packet, and packs an appropriate buffer in network-byte + order suitable for sending over the wire.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketACK.encode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketACK-class.html#decode" class="summary-sig-name">decode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + The decode method of a TftpPacket takes a buffer off of the wire in + network-byte order, and decodes it, populating internal properties as + appropriate.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketACK.decode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketACK.__init__">source code</a></span> + </td> + </tr></table> + + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="__str__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Informal representation operator)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketACK.__str__">source code</a></span> + </td> + </tr></table> + + <p>str(x)</p> + <dl class="fields"> + <dt>Overrides: + object.__str__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="encode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">encode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketACK.encode">source code</a></span> + </td> + </tr></table> + + <p>The encode method of a TftpPacket takes keyword arguments specific to + the type of packet, and packs an appropriate buffer in network-byte order + suitable for sending over the wire.</p> + <p>This is an abstract method.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html#encode">TftpPacket.encode</a> + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="decode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">decode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketACK.decode">source code</a></span> + </td> + </tr></table> + + <p>The decode method of a TftpPacket takes a buffer off of the wire in + network-byte order, and decodes it, populating internal properties as + appropriate. This can only be done once the first 2-byte opcode has + already been decoded, but the data section does include the entire + datagram.</p> + <p>This is an abstract method.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html#decode">TftpPacket.decode</a> + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketDAT-class.html b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketDAT-class.html new file mode 100644 index 0000000..81aec79 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketDAT-class.html @@ -0,0 +1,363 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes.TftpPacketDAT</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpPacketTypes-module.html">Module TftpPacketTypes</a> :: + Class TftpPacketDAT + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpPacketDAT</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketDAT">source code</a></span></p> +<pre class="base-tree"> +object --+ + | +<a href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a> --+ + | + <strong class="uidshort">TftpPacketDAT</strong> +</pre> + +<hr /> +<pre class="literalblock"> + + 2 bytes 2 bytes n bytes + --------------------------------- +DATA | 03 | Block # | Data | + --------------------------------- + + +</pre> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketDAT.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + str(x)</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketDAT.__str__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#encode" class="summary-sig-name">encode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + Encode the DAT packet.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketDAT.encode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html#decode" class="summary-sig-name">decode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + Decode self.buffer into instance variables.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketDAT.decode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketDAT.__init__">source code</a></span> + </td> + </tr></table> + + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="__str__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Informal representation operator)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketDAT.__str__">source code</a></span> + </td> + </tr></table> + + <p>str(x)</p> + <dl class="fields"> + <dt>Overrides: + object.__str__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="encode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">encode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketDAT.encode">source code</a></span> + </td> + </tr></table> + + <p>Encode the DAT packet. This method populates self.buffer, and returns + self for easy method chaining.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html#encode">TftpPacket.encode</a> + </dt> + </dl> +</td></tr></table> +</div> +<a name="decode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">decode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketDAT.decode">source code</a></span> + </td> + </tr></table> + + <p>Decode self.buffer into instance variables. It returns self for easy + method chaining.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html#decode">TftpPacket.decode</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketERR-class.html b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketERR-class.html new file mode 100644 index 0000000..aab44e1 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketERR-class.html @@ -0,0 +1,376 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes.TftpPacketERR</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpPacketTypes-module.html">Module TftpPacketTypes</a> :: + Class TftpPacketERR + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpPacketERR</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketERR">source code</a></span></p> +<pre class="base-tree"> +object --+ + | +<a href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a> --+ + | + <strong class="uidshort">TftpPacketERR</strong> +</pre> + +<hr /> +<pre class="literalblock"> + + 2 bytes 2 bytes string 1 byte + ---------------------------------------- +ERROR | 05 | ErrorCode | ErrMsg | 0 | + ---------------------------------------- + Error Codes + + Value Meaning + + 0 Not defined, see error message (if any). + 1 File not found. + 2 Access violation. + 3 Disk full or allocation exceeded. + 4 Illegal TFTP operation. + 5 Unknown transfer ID. + 6 File already exists. + 7 No such user. + 8 Failed to negotiate options + + +</pre> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketERR.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + str(x)</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketERR.__str__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#encode" class="summary-sig-name">encode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + Encode the DAT packet based on instance variables, populating + self.buffer, returning self.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketERR.encode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketERR-class.html#decode" class="summary-sig-name">decode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + Decode self.buffer, populating instance variables and return self.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketERR.decode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketERR.__init__">source code</a></span> + </td> + </tr></table> + + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="__str__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Informal representation operator)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketERR.__str__">source code</a></span> + </td> + </tr></table> + + <p>str(x)</p> + <dl class="fields"> + <dt>Overrides: + object.__str__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="encode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">encode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketERR.encode">source code</a></span> + </td> + </tr></table> + + <p>Encode the DAT packet based on instance variables, populating + self.buffer, returning self.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html#encode">TftpPacket.encode</a> + </dt> + </dl> +</td></tr></table> +</div> +<a name="decode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">decode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketERR.decode">source code</a></span> + </td> + </tr></table> + + <p>Decode self.buffer, populating instance variables and return self.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html#decode">TftpPacket.decode</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketInitial-class.html b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketInitial-class.html new file mode 100644 index 0000000..d6315dd --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketInitial-class.html @@ -0,0 +1,340 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes.TftpPacketInitial</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpPacketTypes-module.html">Module TftpPacketTypes</a> :: + Class TftpPacketInitial + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpPacketInitial</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketInitial">source code</a></span></p> +<pre class="base-tree"> + object --+ + | + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a> --+ + | + object --+ | + | | +<a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a> --+ + | + <strong class="uidshort">TftpPacketInitial</strong> +</pre> + +<dl><dt>Known Subclasses:</dt> +<dd> + <ul class="subclass-list"> +<li><a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html">TftpPacketRRQ</a></li><li>, <a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html">TftpPacketWRQ</a></li> </ul> +</dd></dl> + +<hr /> +<p>This class is a common parent class for the RRQ and WRQ packets, as + they share quite a bit of code.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketInitial.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#encode" class="summary-sig-name">encode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + Encode the packet's buffer from the instance variables.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketInitial.encode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#decode" class="summary-sig-name">decode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + The decode method of a TftpPacket takes a buffer off of the wire in + network-byte order, and decodes it, populating internal properties as + appropriate.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketInitial.decode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a></code></b>: + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options">decode_options</a></code>, + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions">getoptions</a></code>, + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions">setoptions</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a></code></b>: + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options">options</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketInitial.__init__">source code</a></span> + </td> + </tr></table> + + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="encode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">encode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketInitial.encode">source code</a></span> + </td> + </tr></table> + + <p>Encode the packet's buffer from the instance variables.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html#encode">TftpPacket.encode</a> + </dt> + </dl> +</td></tr></table> +</div> +<a name="decode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">decode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketInitial.decode">source code</a></span> + </td> + </tr></table> + + <p>The decode method of a TftpPacket takes a buffer off of the wire in + network-byte order, and decodes it, populating internal properties as + appropriate. This can only be done once the first 2-byte opcode has + already been decoded, but the data section does include the entire + datagram.</p> + <p>This is an abstract method.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html#decode">TftpPacket.decode</a> + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketOACK-class.html b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketOACK-class.html new file mode 100644 index 0000000..cb1b5e6 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketOACK-class.html @@ -0,0 +1,424 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes.TftpPacketOACK</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpPacketTypes-module.html">Module TftpPacketTypes</a> :: + Class TftpPacketOACK + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpPacketOACK</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketOACK">source code</a></span></p> +<pre class="base-tree"> + object --+ + | + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a> --+ + | + object --+ | + | | +<a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a> --+ + | + <strong class="uidshort">TftpPacketOACK</strong> +</pre> + +<hr /> +<p># +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+ # | + opc | opt1 | 0 | value1 | 0 | optN | 0 | valueN | 0 | # + +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketOACK.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + str(x)</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketOACK.__str__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#encode" class="summary-sig-name">encode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + The encode method of a TftpPacket takes keyword arguments specific to + the type of packet, and packs an appropriate buffer in network-byte + order suitable for sending over the wire.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketOACK.encode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#decode" class="summary-sig-name">decode</a>(<span class="summary-sig-arg">self</span>)</span><br /> + The decode method of a TftpPacket takes a buffer off of the wire in + network-byte order, and decodes it, populating internal properties as + appropriate.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketOACK.decode">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html#match_options" class="summary-sig-name">match_options</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">options</span>)</span><br /> + This method takes a set of options, and tries to match them with its + own.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketOACK.match_options">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a></code></b>: + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options">decode_options</a></code>, + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions">getoptions</a></code>, + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions">setoptions</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a></code></b>: + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options">options</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketOACK.__init__">source code</a></span> + </td> + </tr></table> + + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="__str__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Informal representation operator)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketOACK.__str__">source code</a></span> + </td> + </tr></table> + + <p>str(x)</p> + <dl class="fields"> + <dt>Overrides: + object.__str__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="encode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">encode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketOACK.encode">source code</a></span> + </td> + </tr></table> + + <p>The encode method of a TftpPacket takes keyword arguments specific to + the type of packet, and packs an appropriate buffer in network-byte order + suitable for sending over the wire.</p> + <p>This is an abstract method.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html#encode">TftpPacket.encode</a> + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="decode"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">decode</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketOACK.decode">source code</a></span> + </td> + </tr></table> + + <p>The decode method of a TftpPacket takes a buffer off of the wire in + network-byte order, and decodes it, populating internal properties as + appropriate. This can only be done once the first 2-byte opcode has + already been decoded, but the data section does include the entire + datagram.</p> + <p>This is an abstract method.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html#decode">TftpPacket.decode</a> + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="match_options"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">match_options</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">options</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketOACK.match_options">source code</a></span> + </td> + </tr></table> + + <p>This method takes a set of options, and tries to match them with its + own. It can accept some changes in those options from the server as part + of a negotiation. Changed or unchanged, it will return a dict of the + options so that the session can update itself to the negotiated + options.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketRRQ-class.html b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketRRQ-class.html new file mode 100644 index 0000000..7277114 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketRRQ-class.html @@ -0,0 +1,301 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes.TftpPacketRRQ</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpPacketTypes-module.html">Module TftpPacketTypes</a> :: + Class TftpPacketRRQ + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpPacketRRQ</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketRRQ">source code</a></span></p> +<pre class="base-tree"> + object --+ + | + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a> --+ + | + object --+ | + | | +<a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a> --+ + | + <a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">TftpPacketInitial</a> --+ + | + <strong class="uidshort">TftpPacketRRQ</strong> +</pre> + +<hr /> +<pre class="literalblock"> + + 2 bytes string 1 byte string 1 byte + ----------------------------------------------- +RRQ/ | 01/02 | Filename | 0 | Mode | 0 | +WRQ ----------------------------------------------- + + +</pre> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketRRQ.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + str(x)</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketRRQ.__str__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">TftpPacketInitial</a></code></b>: + <code><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#decode">decode</a></code>, + <code><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#encode">encode</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a></code></b>: + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options">decode_options</a></code>, + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions">getoptions</a></code>, + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions">setoptions</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a></code></b>: + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options">options</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketRRQ.__init__">source code</a></span> + </td> + </tr></table> + + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="__str__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Informal representation operator)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketRRQ.__str__">source code</a></span> + </td> + </tr></table> + + <p>str(x)</p> + <dl class="fields"> + <dt>Overrides: + object.__str__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketWRQ-class.html b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketWRQ-class.html new file mode 100644 index 0000000..0d5d7c8 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketWRQ-class.html @@ -0,0 +1,301 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes.TftpPacketWRQ</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpPacketTypes-module.html">Module TftpPacketTypes</a> :: + Class TftpPacketWRQ + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpPacketWRQ</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWRQ">source code</a></span></p> +<pre class="base-tree"> + object --+ + | + <a href="tftpy.TftpPacketTypes.TftpPacket-class.html">TftpPacket</a> --+ + | + object --+ | + | | +<a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a> --+ + | + <a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">TftpPacketInitial</a> --+ + | + <strong class="uidshort">TftpPacketWRQ</strong> +</pre> + +<hr /> +<pre class="literalblock"> + + 2 bytes string 1 byte string 1 byte + ----------------------------------------------- +RRQ/ | 01/02 | Filename | 0 | Mode | 0 | +WRQ ----------------------------------------------- + + +</pre> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWRQ.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + str(x)</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWRQ.__str__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">TftpPacketInitial</a></code></b>: + <code><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#decode">decode</a></code>, + <code><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html#encode">encode</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a></code></b>: + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options">decode_options</a></code>, + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions">getoptions</a></code>, + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions">setoptions</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html">TftpPacketWithOptions</a></code></b>: + <code><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options">options</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWRQ.__init__">source code</a></span> + </td> + </tr></table> + + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="__str__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Informal representation operator)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWRQ.__str__">source code</a></span> + </td> + </tr></table> + + <p>str(x)</p> + <dl class="fields"> + <dt>Overrides: + object.__str__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html new file mode 100644 index 0000000..d7736e0 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html @@ -0,0 +1,359 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes.TftpPacketWithOptions</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpPacketTypes-module.html">Module TftpPacketTypes</a> :: + Class TftpPacketWithOptions + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpPacketWithOptions</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWithOptions">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <strong class="uidshort">TftpPacketWithOptions</strong> +</pre> + +<dl><dt>Known Subclasses:</dt> +<dd> + <ul class="subclass-list"> +<li><a href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html">TftpPacketInitial</a></li><li>, <a href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html">TftpPacketOACK</a></li> </ul> +</dd></dl> + +<hr /> +<p>This class exists to permit some TftpPacket subclasses to share code + regarding options handling. It does not inherit from TftpPacket, as the + goal is just to share code here, and not cause diamond inheritance.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWithOptions.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="setoptions"></a><span class="summary-sig-name">setoptions</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">options</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWithOptions.setoptions">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="getoptions"></a><span class="summary-sig-name">getoptions</span>(<span class="summary-sig-arg">self</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWithOptions.getoptions">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#decode_options" class="summary-sig-name">decode_options</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">buffer</span>)</span><br /> + This method decodes the section of the buffer that contains an + unknown number of options.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWithOptions.decode_options">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options" class="summary-name">options</a> + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWithOptions.__init__">source code</a></span> + </td> + </tr></table> + + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="decode_options"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">decode_options</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">buffer</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpPacketWithOptions.decode_options">source code</a></span> + </td> + </tr></table> + + <p>This method decodes the section of the buffer that contains an unknown + number of options. It returns a dictionary of option names and + values.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== PROPERTY DETAILS ==================== --> +<a name="section-PropertyDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Property Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-PropertyDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="options"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <h3 class="epydoc">options</h3> + + <dl class="fields"> + <dt>Get Method:</dt> + <dd class="value"><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#getoptions" class="summary-sig-name">getoptions</a>(<span class="summary-sig-arg">self</span>)</span> + </dd> + <dt>Set Method:</dt> + <dd class="value"><span class="summary-sig"><a href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#setoptions" class="summary-sig-name">setoptions</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">options</span>)</span> + </dd> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpPacketTypes.TftpSession-class.html b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpSession-class.html new file mode 100644 index 0000000..5387d0a --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpPacketTypes.TftpSession-class.html @@ -0,0 +1,180 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpPacketTypes.TftpSession</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpPacketTypes-module.html">Module TftpPacketTypes</a> :: + Class TftpSession + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpPacketTypes.TftpSession-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpSession</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpPacketTypes-pysrc.html#TftpSession">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <strong class="uidshort">TftpSession</strong> +</pre> + +<dl><dt>Known Subclasses:</dt> +<dd> + <ul class="subclass-list"> +<li><a href="tftpy.TftpServer%27.TftpServer-class.html">TftpServer'.TftpServer</a></li><li>, <a href="tftpy.TftpClient%27.TftpClient-class.html">TftpClient'.TftpClient</a></li> </ul> +</dd></dl> + +<hr /> +<p>This class is the base class for the tftp client and server. Any + shared code should be in this class.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__init__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpServer'-module.html b/html/tftpy-doc/tftpy.TftpServer'-module.html new file mode 100644 index 0000000..e95babb --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpServer'-module.html @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpServer'</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpServer' + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpServer%27-module.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== MODULE DESCRIPTION ==================== --> +<h1 class="epydoc">Module TftpServer'</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpServer%27-pysrc.html">source code</a></span></p> +<!-- ==================== CLASSES ==================== --> +<a name="section-Classes"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Classes</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Classes" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpServer%27.TftpServer-class.html" class="summary-name">TftpServer</a><br /> + This class implements a tftp server object. + </td> + </tr> +</table> +<!-- ==================== VARIABLES ==================== --> +<a name="section-Variables"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Variables</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Variables" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="DEF_BLKSIZE"></a><span class="summary-name">DEF_BLKSIZE</span> = <code title="512">512</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="DEF_TFTP_PORT"></a><span class="summary-name">DEF_TFTP_PORT</span> = <code title="69">69</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="LOG_LEVEL"></a><span class="summary-name">LOG_LEVEL</span> = <code title="0">0</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MAX_BLKSIZE"></a><span class="summary-name">MAX_BLKSIZE</span> = <code title="65536">65536</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MAX_DUPS"></a><span class="summary-name">MAX_DUPS</span> = <code title="20">20</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MIN_BLKSIZE"></a><span class="summary-name">MIN_BLKSIZE</span> = <code title="8">8</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="SOCK_TIMEOUT"></a><span class="summary-name">SOCK_TIMEOUT</span> = <code title="5">5</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="TIMEOUT_RETRIES"></a><span class="summary-name">TIMEOUT_RETRIES</span> = <code title="5">5</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="log"></a><span class="summary-name">log</span> = <code title="logging.getLogger('tftpy')">logging.getLogger('tftpy')</code> + </td> + </tr> +</table> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpServer'-pysrc.html b/html/tftpy-doc/tftpy.TftpServer'-pysrc.html new file mode 100644 index 0000000..6eaf04e --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpServer'-pysrc.html @@ -0,0 +1,377 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpServer'</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpServer' + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpServer%27-pysrc.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<h1 class="epydoc">Source Code for <a href="tftpy.TftpServer%27-module.html">Module tftpy.TftpServer'</a></h1> +<pre class="py-src"> +<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">socket</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">,</tt> <tt class="py-name">re</tt><tt class="py-op">,</tt> <tt class="py-name">time</tt><tt class="py-op">,</tt> <tt class="py-name">random</tt> </tt> +<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">select</tt> </tt> +<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module tftpy.TftpShared=tftpy.TftpShared-module.html"><a title="tftpy.TftpShared" class="py-name" href="#" onclick="return doclink('link-0', 'TftpShared', 'link-0');">TftpShared</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name" targets="Module tftpy.TftpPacketTypes=tftpy.TftpPacketTypes-module.html"><a title="tftpy.TftpPacketTypes" class="py-name" href="#" onclick="return doclink('link-1', 'TftpPacketTypes', 'link-1');">TftpPacketTypes</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-2" class="py-name" targets="Class tftpy.TftpPacketFactory'.TftpPacketFactory=tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html"><a title="tftpy.TftpPacketFactory'.TftpPacketFactory" class="py-name" href="#" onclick="return doclink('link-2', 'TftpPacketFactory', 'link-2');">TftpPacketFactory</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-3" class="py-name" targets="Module tftpy.TftpStates=tftpy.TftpStates-module.html"><a title="tftpy.TftpStates" class="py-name" href="#" onclick="return doclink('link-3', 'TftpStates', 'link-3');">TftpStates</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"> </tt> +<a name="TftpServer"></a><div id="TftpServer-def"><a name="L8"></a><tt class="py-lineno"> 8</tt> <a class="py-toggle" href="#" id="TftpServer-toggle" onclick="return toggle('TftpServer');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpServer'.TftpServer-class.html">TftpServer</a><tt class="py-op">(</tt><tt class="py-base-class">TftpSession</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpServer-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpServer-expanded"><a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"> <tt class="py-docstring">"""This class implements a tftp server object."""</tt> </tt> +<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"> </tt> +<a name="TftpServer.__init__"></a><div id="TftpServer.__init__-def"><a name="L11"></a><tt class="py-lineno"> 11</tt> <a class="py-toggle" href="#" id="TftpServer.__init__-toggle" onclick="return toggle('TftpServer.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpServer'.TftpServer-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tftproot</tt><tt class="py-op">=</tt><tt class="py-string">'/tftpboot'</tt><tt class="py-op">,</tt> <tt class="py-param">dyn_file_func</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpServer.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpServer.__init__-expanded"><a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"> <tt class="py-docstring">"""Class constructor. It takes two optional arguments. tftproot is</tt> </tt> +<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-docstring"> the path to the tftproot directory to serve files from and/or write</tt> </tt> +<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-docstring"> them to. dyn_file_func is a callable that must return a file-like</tt> </tt> +<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-docstring"> object to read from during downloads. This permits the serving of</tt> </tt> +<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-docstring"> dynamic content."""</tt> </tt> +<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">listenip</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">listenport</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: What about multiple roots?</tt> </tt> +<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">abspath</tt><tt class="py-op">(</tt><tt class="py-name">tftproot</tt><tt class="py-op">)</tt> </tt> +<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dyn_file_func</tt> <tt class="py-op">=</tt> <tt class="py-name">dyn_file_func</tt> </tt> +<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"> <tt class="py-comment"># A dict of sessions, where each session is keyed by a string like</tt> </tt> +<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># ip:tid for the remote end.</tt> </tt> +<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt> +<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> </tt> +<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">exists</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"> <tt id="link-4" class="py-name" targets="Variable tftpy.TftpClient'.log=tftpy.TftpClient%27-module.html#log,Variable tftpy.TftpPacketFactory'.log=tftpy.TftpPacketFactory%27-module.html#log,Variable tftpy.TftpServer'.log=tftpy.TftpServer%27-module.html#log,Variable tftpy.TftpShared.log=tftpy.TftpShared-module.html#log"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-4', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"tftproot %s does exist"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> </tt> +<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">isdir</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-5" class="py-name" targets="Class tftpy.TftpShared.TftpException=tftpy.TftpShared.TftpException-class.html"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-5', 'TftpException', 'link-5');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"The tftproot must be a directory."</tt> </tt> +<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> <tt id="link-6" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-6', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"tftproot %s is a directory"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> </tt> +<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">access</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">R_OK</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> <tt id="link-7" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-7', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"tftproot %s is readable"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> </tt> +<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-8" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-8', 'TftpException', 'link-5');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"The tftproot must be readable"</tt> </tt> +<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">access</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">W_OK</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> <tt id="link-9" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-9', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"tftproot %s is writable"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> </tt> +<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> <tt id="link-10" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-10', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">"The tftproot %s is not writable"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">)</tt> </tt> +<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-11" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-11', 'TftpException', 'link-5');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"The tftproot does not exist."</tt> </tt> +</div><a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> </tt> +<a name="TftpServer.listen"></a><div id="TftpServer.listen-def"><a name="L44"></a><tt class="py-lineno"> 44</tt> <a class="py-toggle" href="#" id="TftpServer.listen-toggle" onclick="return toggle('TftpServer.listen');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpServer'.TftpServer-class.html#listen">listen</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> </tt> +<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt class="py-param">listenip</tt><tt class="py-op">=</tt><tt class="py-string">""</tt><tt class="py-op">,</tt> </tt> +<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt class="py-param">listenport</tt><tt class="py-op">=</tt><tt id="link-12" class="py-name" targets="Variable tftpy.TftpClient'.DEF_TFTP_PORT=tftpy.TftpClient%27-module.html#DEF_TFTP_PORT,Variable tftpy.TftpPacketFactory'.DEF_TFTP_PORT=tftpy.TftpPacketFactory%27-module.html#DEF_TFTP_PORT,Variable tftpy.TftpServer'.DEF_TFTP_PORT=tftpy.TftpServer%27-module.html#DEF_TFTP_PORT,Variable tftpy.TftpShared.DEF_TFTP_PORT=tftpy.TftpShared-module.html#DEF_TFTP_PORT"><a title="tftpy.TftpClient'.DEF_TFTP_PORT +tftpy.TftpPacketFactory'.DEF_TFTP_PORT +tftpy.TftpServer'.DEF_TFTP_PORT +tftpy.TftpShared.DEF_TFTP_PORT" class="py-name" href="#" onclick="return doclink('link-12', 'DEF_TFTP_PORT', 'link-12');">DEF_TFTP_PORT</a></tt><tt class="py-op">,</tt> </tt> +<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt class="py-param">timeout</tt><tt class="py-op">=</tt><tt id="link-13" class="py-name" targets="Variable tftpy.TftpClient'.SOCK_TIMEOUT=tftpy.TftpClient%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpPacketFactory'.SOCK_TIMEOUT=tftpy.TftpPacketFactory%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpServer'.SOCK_TIMEOUT=tftpy.TftpServer%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpShared.SOCK_TIMEOUT=tftpy.TftpShared-module.html#SOCK_TIMEOUT"><a title="tftpy.TftpClient'.SOCK_TIMEOUT +tftpy.TftpPacketFactory'.SOCK_TIMEOUT +tftpy.TftpServer'.SOCK_TIMEOUT +tftpy.TftpShared.SOCK_TIMEOUT" class="py-name" href="#" onclick="return doclink('link-13', 'SOCK_TIMEOUT', 'link-13');">SOCK_TIMEOUT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpServer.listen-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpServer.listen-expanded"><a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-docstring">"""Start a server listening on the supplied interface and port. This</tt> </tt> +<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"><tt class="py-docstring"> defaults to INADDR_ANY (all interfaces) and UDP port 69. You can also</tt> </tt> +<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-docstring"> supply a different socket timeout value, if desired."""</tt> </tt> +<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-name">tftp_factory</tt> <tt class="py-op">=</tt> <tt id="link-14" class="py-name"><a title="tftpy.TftpPacketFactory'.TftpPacketFactory" class="py-name" href="#" onclick="return doclink('link-14', 'TftpPacketFactory', 'link-2');">TftpPacketFactory</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> </tt> +<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-comment"># Don't use new 2.5 ternary operator yet</tt> </tt> +<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># listenip = listenip if listenip else '0.0.0.0'</tt> </tt> +<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">listenip</tt><tt class="py-op">:</tt> <tt class="py-name">listenip</tt> <tt class="py-op">=</tt> <tt class="py-string">'0.0.0.0'</tt> </tt> +<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt id="link-15" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-15', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Server requested on ip %s, port %s"</tt> </tt> +<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">listenip</tt><tt class="py-op">,</tt> <tt class="py-name">listenport</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-comment"># FIXME - sockets should be non-blocking?</tt> </tt> +<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">AF_INET</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SOCK_DGRAM</tt><tt class="py-op">)</tt> </tt> +<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">.</tt><tt class="py-name">bind</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">listenip</tt><tt class="py-op">,</tt> <tt class="py-name">listenport</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">,</tt> <tt class="py-name">err</tt><tt class="py-op">:</tt> </tt> +<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-comment"># Reraise it for now.</tt> </tt> +<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">raise</tt> </tt> +<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> </tt> +<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt id="link-16" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-16', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Starting receive loop..."</tt><tt class="py-op">)</tt> </tt> +<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt> +<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-comment"># Build the inputlist array of sockets to select() on.</tt> </tt> +<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">inputlist</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt> +<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> <tt class="py-name">inputlist</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">)</tt> </tt> +<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">:</tt> </tt> +<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-name">inputlist</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">)</tt> </tt> +<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> </tt> +<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-comment"># Block until some socket has input on it.</tt> </tt> +<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-17" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-17', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Performing select on this inputlist: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">inputlist</tt><tt class="py-op">)</tt> </tt> +<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">readyinput</tt><tt class="py-op">,</tt> <tt class="py-name">readyoutput</tt><tt class="py-op">,</tt> <tt class="py-name">readyspecial</tt> <tt class="py-op">=</tt> <tt class="py-name">select</tt><tt class="py-op">.</tt><tt class="py-name">select</tt><tt class="py-op">(</tt><tt class="py-name">inputlist</tt><tt class="py-op">,</tt> </tt> +<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt> +<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt> +<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt id="link-18" class="py-name"><a title="tftpy.TftpClient'.SOCK_TIMEOUT +tftpy.TftpPacketFactory'.SOCK_TIMEOUT +tftpy.TftpServer'.SOCK_TIMEOUT +tftpy.TftpShared.SOCK_TIMEOUT" class="py-name" href="#" onclick="return doclink('link-18', 'SOCK_TIMEOUT', 'link-13');">SOCK_TIMEOUT</a></tt><tt class="py-op">)</tt> </tt> +<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> </tt> +<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">deletion_list</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt> +<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> </tt> +<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-comment"># Handle the available data, if any. Maybe we timed-out.</tt> </tt> +<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">for</tt> <tt class="py-name">readysock</tt> <tt class="py-keyword">in</tt> <tt class="py-name">readyinput</tt><tt class="py-op">:</tt> </tt> +<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-comment"># Is the traffic on the main server socket? ie. new session?</tt> </tt> +<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">readysock</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">:</tt> </tt> +<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt id="link-19" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-19', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Data ready on our main socket"</tt><tt class="py-op">)</tt> </tt> +<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">buffer</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">raddress</tt><tt class="py-op">,</tt> <tt class="py-name">rport</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">.</tt><tt class="py-name">recvfrom</tt><tt class="py-op">(</tt><tt id="link-20" class="py-name" targets="Variable tftpy.TftpClient'.MAX_BLKSIZE=tftpy.TftpClient%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpPacketFactory'.MAX_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpServer'.MAX_BLKSIZE=tftpy.TftpServer%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpShared.MAX_BLKSIZE=tftpy.TftpShared-module.html#MAX_BLKSIZE"><a title="tftpy.TftpClient'.MAX_BLKSIZE +tftpy.TftpPacketFactory'.MAX_BLKSIZE +tftpy.TftpServer'.MAX_BLKSIZE +tftpy.TftpShared.MAX_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-20', 'MAX_BLKSIZE', 'link-20');">MAX_BLKSIZE</a></tt><tt class="py-op">)</tt> </tt> +<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> </tt> +<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt id="link-21" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-21', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Read %d bytes"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> </tt> +<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-name">recvpkt</tt> <tt class="py-op">=</tt> <tt class="py-name">tftp_factory</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Method tftpy.TftpPacketFactory'.TftpPacketFactory.parse()=tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#parse"><a title="tftpy.TftpPacketFactory'.TftpPacketFactory.parse" class="py-name" href="#" onclick="return doclink('link-22', 'parse', 'link-22');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt> </tt> +<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-comment"># Forge a session key based on the client's IP and port,</tt> </tt> +<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># which should safely work through NAT.</tt> </tt> +<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">key</tt> <tt class="py-op">=</tt> <tt class="py-string">"%s:%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">raddress</tt><tt class="py-op">,</tt> <tt class="py-name">rport</tt><tt class="py-op">)</tt> </tt> +<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> </tt> +<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt id="link-23" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-23', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Creating new server context for "</tt> </tt> +<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-string">"session key = %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-24" class="py-name" targets="Class tftpy.TftpStates.TftpContextServer=tftpy.TftpStates.TftpContextServer-class.html"><a title="tftpy.TftpStates.TftpContextServer" class="py-name" href="#" onclick="return doclink('link-24', 'TftpContextServer', 'link-24');">TftpContextServer</a></tt><tt class="py-op">(</tt><tt class="py-name">raddress</tt><tt class="py-op">,</tt> </tt> +<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-name">rport</tt><tt class="py-op">,</tt> </tt> +<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-name">timeout</tt><tt class="py-op">,</tt> </tt> +<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt><tt class="py-op">,</tt> </tt> +<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dyn_file_func</tt><tt class="py-op">)</tt> </tt> +<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name" targets="Method tftpy.TftpStates.TftpContext.start()=tftpy.TftpStates.TftpContext-class.html#start,Method tftpy.TftpStates.TftpContextClientDownload.start()=tftpy.TftpStates.TftpContextClientDownload-class.html#start,Method tftpy.TftpStates.TftpContextClientUpload.start()=tftpy.TftpStates.TftpContextClientUpload-class.html#start,Method tftpy.TftpStates.TftpContextServer.start()=tftpy.TftpStates.TftpContextServer-class.html#start"><a title="tftpy.TftpStates.TftpContext.start +tftpy.TftpStates.TftpContextClientDownload.start +tftpy.TftpStates.TftpContextClientUpload.start +tftpy.TftpStates.TftpContextServer.start" class="py-name" href="#" onclick="return doclink('link-25', 'start', 'link-25');">start</a></tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt> </tt> +<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt id="link-26" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-26', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"received traffic on main socket for "</tt> </tt> +<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-string">"existing session??"</tt><tt class="py-op">)</tt> </tt> +<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> </tt> +<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-comment"># Must find the owner of this traffic.</tt> </tt> +<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">:</tt> </tt> +<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">readysock</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">:</tt> </tt> +<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt id="link-27" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-27', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Matched input to session key %s"</tt> </tt> +<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Method tftpy.TftpStates.TftpContext.cycle()=tftpy.TftpStates.TftpContext-class.html#cycle"><a title="tftpy.TftpStates.TftpContext.cycle" class="py-name" href="#" onclick="return doclink('link-28', 'cycle', 'link-28');">cycle</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">state</tt> <tt class="py-op">==</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt> +<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt id="link-29" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-29', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Successful transfer."</tt><tt class="py-op">)</tt> </tt> +<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-name">deletion_list</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-30" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-30', 'TftpException', 'link-5');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-name">err</tt><tt class="py-op">:</tt> </tt> +<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-name">deletion_list</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt id="link-31" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-31', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"Fatal exception thrown from "</tt> </tt> +<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-string">"session %s: %s"</tt> </tt> +<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">err</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt> +<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> </tt> +<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt id="link-32" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-32', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"Can't find the owner for this packet. "</tt> </tt> +<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-string">"Discarding."</tt><tt class="py-op">)</tt> </tt> +<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> </tt> +<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt id="link-33" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-33', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Looping on all sessions to check for timeouts"</tt><tt class="py-op">)</tt> </tt> +<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-name">now</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">:</tt> </tt> +<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name" targets="Method tftpy.TftpStates.TftpContext.checkTimeout()=tftpy.TftpStates.TftpContext-class.html#checkTimeout"><a title="tftpy.TftpStates.TftpContext.checkTimeout" class="py-name" href="#" onclick="return doclink('link-34', 'checkTimeout', 'link-34');">checkTimeout</a></tt><tt class="py-op">(</tt><tt class="py-name">now</tt><tt class="py-op">)</tt> </tt> +<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-35" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-35', 'TftpException', 'link-5');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-name">err</tt><tt class="py-op">:</tt> </tt> +<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt id="link-36" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-36', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">err</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-name">deletion_list</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> </tt> +<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt id="link-37" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-37', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Iterating deletion list."</tt><tt class="py-op">)</tt> </tt> +<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">deletion_list</tt><tt class="py-op">:</tt> </tt> +<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt id="link-38" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-38', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> </tt> +<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt id="link-39" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-39', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Session %s complete"</tt> <tt class="py-op">%</tt> <tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt id="link-40" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-40', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Gathering up metrics from session before deleting"</tt><tt class="py-op">)</tt> </tt> +<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Method tftpy.TftpStates.TftpContext.end()=tftpy.TftpStates.TftpContext-class.html#end,Method tftpy.TftpStates.TftpContextClientDownload.end()=tftpy.TftpStates.TftpContextClientDownload-class.html#end,Method tftpy.TftpStates.TftpContextClientUpload.end()=tftpy.TftpStates.TftpContextClientUpload-class.html#end,Method tftpy.TftpStates.TftpContextServer.end()=tftpy.TftpStates.TftpContextServer-class.html#end"><a title="tftpy.TftpStates.TftpContext.end +tftpy.TftpStates.TftpContextClientDownload.end +tftpy.TftpStates.TftpContextClientUpload.end +tftpy.TftpStates.TftpContextServer.end" class="py-name" href="#" onclick="return doclink('link-41', 'end', 'link-41');">end</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-name">metrics</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt> </tt> +<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">duration</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt id="link-42" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-42', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Duration too short, rate undetermined"</tt><tt class="py-op">)</tt> </tt> +<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt id="link-43" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-43', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Transferred %.2f bytes in %.2f seconds"</tt> </tt> +<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">bytes</tt><tt class="py-op">,</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">duration</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt id="link-44" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-44', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Average rate: %.2f kbps"</tt> <tt class="py-op">%</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">kbps</tt><tt class="py-op">)</tt> </tt> +<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt id="link-45" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-45', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"%.2f bytes in resent data"</tt> <tt class="py-op">%</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">resent_bytes</tt><tt class="py-op">)</tt> </tt> +<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt id="link-46" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-46', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"%d duplicate packets"</tt> <tt class="py-op">%</tt> <tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">dupcount</tt><tt class="py-op">)</tt> </tt> +<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt id="link-47" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-47', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Deleting session %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-keyword">del</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sessions</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt> +<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt id="link-48" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-48', 'log', 'link-4');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Strange, session %s is not on the deletion list"</tt> </tt> +<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">key</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> </tt><script type="text/javascript"> +<!-- +expandto(location.href); +// --> +</script> +</pre> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpServer'.TftpServer-class.html b/html/tftpy-doc/tftpy.TftpServer'.TftpServer-class.html new file mode 100644 index 0000000..5557084 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpServer'.TftpServer-class.html @@ -0,0 +1,284 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpServer'.TftpServer</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpServer%27-module.html">Module TftpServer'</a> :: + Class TftpServer + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpServer%27.TftpServer-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpServer</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpServer%27-pysrc.html#TftpServer">source code</a></span></p> +<pre class="base-tree"> + object --+ + | +<a href="tftpy.TftpPacketTypes.TftpSession-class.html">TftpPacketTypes.TftpSession</a> --+ + | + <strong class="uidshort">TftpServer</strong> +</pre> + +<hr /> +<p>This class implements a tftp server object.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpServer%27.TftpServer-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">tftproot</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">/tftpboot</code><code class="variable-quote">'</code></span>, + <span class="summary-sig-arg">dyn_file_func</span>=<span class="summary-sig-default">None</span>)</span><br /> + Class constructor.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpServer%27-pysrc.html#TftpServer.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpServer%27.TftpServer-class.html#listen" class="summary-sig-name">listen</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">listenip</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>, + <span class="summary-sig-arg">listenport</span>=<span class="summary-sig-default">69</span>, + <span class="summary-sig-arg">timeout</span>=<span class="summary-sig-default">5</span>)</span><br /> + Start a server listening on the supplied interface and port.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpServer%27-pysrc.html#TftpServer.listen">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">tftproot</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">/tftpboot</code><code class="variable-quote">'</code></span>, + <span class="sig-arg">dyn_file_func</span>=<span class="sig-default">None</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpServer%27-pysrc.html#TftpServer.__init__">source code</a></span> + </td> + </tr></table> + + <p>Class constructor. It takes two optional arguments. tftproot is the + path to the tftproot directory to serve files from and/or write them to. + dyn_file_func is a callable that must return a file-like object to read + from during downloads. This permits the serving of dynamic content.</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + </dt> + </dl> +</td></tr></table> +</div> +<a name="listen"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">listen</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">listenip</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code></span>, + <span class="sig-arg">listenport</span>=<span class="sig-default">69</span>, + <span class="sig-arg">timeout</span>=<span class="sig-default">5</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpServer%27-pysrc.html#TftpServer.listen">source code</a></span> + </td> + </tr></table> + + <p>Start a server listening on the supplied interface and port. This + defaults to INADDR_ANY (all interfaces) and UDP port 69. You can also + supply a different socket timeout value, if desired.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpShared-module.html b/html/tftpy-doc/tftpy.TftpShared-module.html new file mode 100644 index 0000000..42ff4ac --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpShared-module.html @@ -0,0 +1,339 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpShared</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpShared + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpShared-module.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== MODULE DESCRIPTION ==================== --> +<h1 class="epydoc">Module TftpShared</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpShared-pysrc.html">source code</a></span></p> +<!-- ==================== CLASSES ==================== --> +<a name="section-Classes"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Classes</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Classes" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpShared.TftpErrors-class.html" class="summary-name">TftpErrors</a><br /> + This class is a convenience for defining the common tftp error + codes, and making them more readable in the code. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpShared.TftpException-class.html" class="summary-name">TftpException</a><br /> + This class is the parent class of all exceptions regarding the + handling of the TFTP protocol. + </td> + </tr> +</table> +<!-- ==================== FUNCTIONS ==================== --> +<a name="section-Functions"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Functions</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Functions" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpShared-module.html#tftpassert" class="summary-sig-name">tftpassert</a>(<span class="summary-sig-arg">condition</span>, + <span class="summary-sig-arg">msg</span>)</span><br /> + This function is a simple utility that will check the condition + passed for a false state.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpShared-pysrc.html#tftpassert">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpShared-module.html#setLogLevel" class="summary-sig-name">setLogLevel</a>(<span class="summary-sig-arg">level</span>)</span><br /> + This function is a utility function for setting the internal log + level.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpShared-pysrc.html#setLogLevel">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +</table> +<!-- ==================== VARIABLES ==================== --> +<a name="section-Variables"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Variables</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Variables" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="LOG_LEVEL"></a><span class="summary-name">LOG_LEVEL</span> = <code title="0">0</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MIN_BLKSIZE"></a><span class="summary-name">MIN_BLKSIZE</span> = <code title="8">8</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="DEF_BLKSIZE"></a><span class="summary-name">DEF_BLKSIZE</span> = <code title="512">512</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MAX_BLKSIZE"></a><span class="summary-name">MAX_BLKSIZE</span> = <code title="65536">65536</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="SOCK_TIMEOUT"></a><span class="summary-name">SOCK_TIMEOUT</span> = <code title="5">5</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="MAX_DUPS"></a><span class="summary-name">MAX_DUPS</span> = <code title="20">20</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="TIMEOUT_RETRIES"></a><span class="summary-name">TIMEOUT_RETRIES</span> = <code title="5">5</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="DEF_TFTP_PORT"></a><span class="summary-name">DEF_TFTP_PORT</span> = <code title="69">69</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="log"></a><span class="summary-name">log</span> = <code title="logging.getLogger('tftpy')">logging.getLogger('tftpy')</code> + </td> + </tr> +</table> +<!-- ==================== FUNCTION DETAILS ==================== --> +<a name="section-FunctionDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Function Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-FunctionDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="tftpassert"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">tftpassert</span>(<span class="sig-arg">condition</span>, + <span class="sig-arg">msg</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpShared-pysrc.html#tftpassert">source code</a></span> + </td> + </tr></table> + + <p>This function is a simple utility that will check the condition passed + for a false state. If it finds one, it throws a TftpException with the + message passed. This just makes the code throughout cleaner by + refactoring.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<a name="setLogLevel"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">setLogLevel</span>(<span class="sig-arg">level</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpShared-pysrc.html#setLogLevel">source code</a></span> + </td> + </tr></table> + + <p>This function is a utility function for setting the internal log + level. The log level defaults to logging.NOTSET, so unwanted output to + stdout is not created.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpShared-pysrc.html b/html/tftpy-doc/tftpy.TftpShared-pysrc.html new file mode 100644 index 0000000..57fe26e --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpShared-pysrc.html @@ -0,0 +1,197 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpShared</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpShared + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpShared-pysrc.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<h1 class="epydoc">Source Code for <a href="tftpy.TftpShared-module.html">Module tftpy.TftpShared</a></h1> +<pre class="py-src"> +<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt> +<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"> </tt> +<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable tftpy.TftpClient'.LOG_LEVEL=tftpy.TftpClient%27-module.html#LOG_LEVEL,Variable tftpy.TftpPacketFactory'.LOG_LEVEL=tftpy.TftpPacketFactory%27-module.html#LOG_LEVEL,Variable tftpy.TftpServer'.LOG_LEVEL=tftpy.TftpServer%27-module.html#LOG_LEVEL,Variable tftpy.TftpShared.LOG_LEVEL=tftpy.TftpShared-module.html#LOG_LEVEL"><a title="tftpy.TftpClient'.LOG_LEVEL +tftpy.TftpPacketFactory'.LOG_LEVEL +tftpy.TftpServer'.LOG_LEVEL +tftpy.TftpShared.LOG_LEVEL" class="py-name" href="#" onclick="return doclink('link-0', 'LOG_LEVEL', 'link-0');">LOG_LEVEL</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">NOTSET</tt> </tt> +<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable tftpy.TftpClient'.MIN_BLKSIZE=tftpy.TftpClient%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpPacketFactory'.MIN_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpServer'.MIN_BLKSIZE=tftpy.TftpServer%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpShared.MIN_BLKSIZE=tftpy.TftpShared-module.html#MIN_BLKSIZE"><a title="tftpy.TftpClient'.MIN_BLKSIZE +tftpy.TftpPacketFactory'.MIN_BLKSIZE +tftpy.TftpServer'.MIN_BLKSIZE +tftpy.TftpShared.MIN_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-1', 'MIN_BLKSIZE', 'link-1');">MIN_BLKSIZE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">8</tt> </tt> +<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt id="link-2" class="py-name" targets="Variable tftpy.TftpClient'.DEF_BLKSIZE=tftpy.TftpClient%27-module.html#DEF_BLKSIZE,Variable tftpy.TftpPacketFactory'.DEF_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#DEF_BLKSIZE,Variable tftpy.TftpServer'.DEF_BLKSIZE=tftpy.TftpServer%27-module.html#DEF_BLKSIZE,Variable tftpy.TftpShared.DEF_BLKSIZE=tftpy.TftpShared-module.html#DEF_BLKSIZE"><a title="tftpy.TftpClient'.DEF_BLKSIZE +tftpy.TftpPacketFactory'.DEF_BLKSIZE +tftpy.TftpServer'.DEF_BLKSIZE +tftpy.TftpShared.DEF_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-2', 'DEF_BLKSIZE', 'link-2');">DEF_BLKSIZE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">512</tt> </tt> +<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable tftpy.TftpClient'.MAX_BLKSIZE=tftpy.TftpClient%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpPacketFactory'.MAX_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpServer'.MAX_BLKSIZE=tftpy.TftpServer%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpShared.MAX_BLKSIZE=tftpy.TftpShared-module.html#MAX_BLKSIZE"><a title="tftpy.TftpClient'.MAX_BLKSIZE +tftpy.TftpPacketFactory'.MAX_BLKSIZE +tftpy.TftpServer'.MAX_BLKSIZE +tftpy.TftpShared.MAX_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-3', 'MAX_BLKSIZE', 'link-3');">MAX_BLKSIZE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">65536</tt> </tt> +<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable tftpy.TftpClient'.SOCK_TIMEOUT=tftpy.TftpClient%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpPacketFactory'.SOCK_TIMEOUT=tftpy.TftpPacketFactory%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpServer'.SOCK_TIMEOUT=tftpy.TftpServer%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpShared.SOCK_TIMEOUT=tftpy.TftpShared-module.html#SOCK_TIMEOUT"><a title="tftpy.TftpClient'.SOCK_TIMEOUT +tftpy.TftpPacketFactory'.SOCK_TIMEOUT +tftpy.TftpServer'.SOCK_TIMEOUT +tftpy.TftpShared.SOCK_TIMEOUT" class="py-name" href="#" onclick="return doclink('link-4', 'SOCK_TIMEOUT', 'link-4');">SOCK_TIMEOUT</a></tt> <tt class="py-op">=</tt> <tt class="py-number">5</tt> </tt> +<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt id="link-5" class="py-name" targets="Variable tftpy.TftpClient'.MAX_DUPS=tftpy.TftpClient%27-module.html#MAX_DUPS,Variable tftpy.TftpPacketFactory'.MAX_DUPS=tftpy.TftpPacketFactory%27-module.html#MAX_DUPS,Variable tftpy.TftpServer'.MAX_DUPS=tftpy.TftpServer%27-module.html#MAX_DUPS,Variable tftpy.TftpShared.MAX_DUPS=tftpy.TftpShared-module.html#MAX_DUPS"><a title="tftpy.TftpClient'.MAX_DUPS +tftpy.TftpPacketFactory'.MAX_DUPS +tftpy.TftpServer'.MAX_DUPS +tftpy.TftpShared.MAX_DUPS" class="py-name" href="#" onclick="return doclink('link-5', 'MAX_DUPS', 'link-5');">MAX_DUPS</a></tt> <tt class="py-op">=</tt> <tt class="py-number">20</tt> </tt> +<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt id="link-6" class="py-name" targets="Variable tftpy.TftpClient'.TIMEOUT_RETRIES=tftpy.TftpClient%27-module.html#TIMEOUT_RETRIES,Variable tftpy.TftpPacketFactory'.TIMEOUT_RETRIES=tftpy.TftpPacketFactory%27-module.html#TIMEOUT_RETRIES,Variable tftpy.TftpServer'.TIMEOUT_RETRIES=tftpy.TftpServer%27-module.html#TIMEOUT_RETRIES,Variable tftpy.TftpShared.TIMEOUT_RETRIES=tftpy.TftpShared-module.html#TIMEOUT_RETRIES"><a title="tftpy.TftpClient'.TIMEOUT_RETRIES +tftpy.TftpPacketFactory'.TIMEOUT_RETRIES +tftpy.TftpServer'.TIMEOUT_RETRIES +tftpy.TftpShared.TIMEOUT_RETRIES" class="py-name" href="#" onclick="return doclink('link-6', 'TIMEOUT_RETRIES', 'link-6');">TIMEOUT_RETRIES</a></tt> <tt class="py-op">=</tt> <tt class="py-number">5</tt> </tt> +<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt id="link-7" class="py-name" targets="Variable tftpy.TftpClient'.DEF_TFTP_PORT=tftpy.TftpClient%27-module.html#DEF_TFTP_PORT,Variable tftpy.TftpPacketFactory'.DEF_TFTP_PORT=tftpy.TftpPacketFactory%27-module.html#DEF_TFTP_PORT,Variable tftpy.TftpServer'.DEF_TFTP_PORT=tftpy.TftpServer%27-module.html#DEF_TFTP_PORT,Variable tftpy.TftpShared.DEF_TFTP_PORT=tftpy.TftpShared-module.html#DEF_TFTP_PORT"><a title="tftpy.TftpClient'.DEF_TFTP_PORT +tftpy.TftpPacketFactory'.DEF_TFTP_PORT +tftpy.TftpServer'.DEF_TFTP_PORT +tftpy.TftpShared.DEF_TFTP_PORT" class="py-name" href="#" onclick="return doclink('link-7', 'DEF_TFTP_PORT', 'link-7');">DEF_TFTP_PORT</a></tt> <tt class="py-op">=</tt> <tt class="py-number">69</tt> </tt> +<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"> </tt> +<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"><tt class="py-comment"># Initialize the logger.</tt> </tt> +<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#logging.basicConfig(</tt> </tt> +<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># level=LOG_LEVEL,</tt> </tt> +<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',</tt> </tt> +<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># datefmt='%m-%d %H:%M:%S')</tt> </tt> +<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">basicConfig</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-comment"># The logger used by this library. Feel free to clobber it with your own, if you like, as</tt> </tt> +<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># long as it conforms to Python's logging.</tt> </tt> +<a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-8" class="py-name" targets="Variable tftpy.TftpClient'.log=tftpy.TftpClient%27-module.html#log,Variable tftpy.TftpPacketFactory'.log=tftpy.TftpPacketFactory%27-module.html#log,Variable tftpy.TftpServer'.log=tftpy.TftpServer%27-module.html#log,Variable tftpy.TftpShared.log=tftpy.TftpShared-module.html#log"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-8', 'log', 'link-8');">log</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-string">'tftpy'</tt><tt class="py-op">)</tt> </tt> +<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"> </tt> +<a name="tftpassert"></a><div id="tftpassert-def"><a name="L22"></a><tt class="py-lineno">22</tt> <a class="py-toggle" href="#" id="tftpassert-toggle" onclick="return toggle('tftpassert');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpShared-module.html#tftpassert">tftpassert</a><tt class="py-op">(</tt><tt class="py-param">condition</tt><tt class="py-op">,</tt> <tt class="py-param">msg</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="tftpassert-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="tftpassert-expanded"><a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"> <tt class="py-docstring">"""This function is a simple utility that will check the condition</tt> </tt> +<a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"><tt class="py-docstring"> passed for a false state. If it finds one, it throws a TftpException</tt> </tt> +<a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"><tt class="py-docstring"> with the message passed. This just makes the code throughout cleaner</tt> </tt> +<a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"><tt class="py-docstring"> by refactoring."""</tt> </tt> +<a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">condition</tt><tt class="py-op">:</tt> </tt> +<a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-9" class="py-name" targets="Class tftpy.TftpShared.TftpException=tftpy.TftpShared.TftpException-class.html"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-9', 'TftpException', 'link-9');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-name">msg</tt> </tt> +</div><a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"> </tt> +<a name="setLogLevel"></a><div id="setLogLevel-def"><a name="L30"></a><tt class="py-lineno">30</tt> <a class="py-toggle" href="#" id="setLogLevel-toggle" onclick="return toggle('setLogLevel');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpShared-module.html#setLogLevel">setLogLevel</a><tt class="py-op">(</tt><tt class="py-param">level</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="setLogLevel-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="setLogLevel-expanded"><a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"> <tt class="py-docstring">"""This function is a utility function for setting the internal log level.</tt> </tt> +<a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"><tt class="py-docstring"> The log level defaults to logging.NOTSET, so unwanted output to stdout is</tt> </tt> +<a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"><tt class="py-docstring"> not created."""</tt> </tt> +<a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"> <tt class="py-keyword">global</tt> <tt id="link-10" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-10', 'log', 'link-8');">log</a></tt> </tt> +<a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"> <tt id="link-11" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-11', 'log', 'link-8');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">setLevel</tt><tt class="py-op">(</tt><tt class="py-name">level</tt><tt class="py-op">)</tt> </tt> +</div><a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"> </tt> +<a name="TftpErrors"></a><div id="TftpErrors-def"><a name="L37"></a><tt class="py-lineno">37</tt> <a class="py-toggle" href="#" id="TftpErrors-toggle" onclick="return toggle('TftpErrors');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpShared.TftpErrors-class.html">TftpErrors</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpErrors-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="TftpErrors-expanded"><a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"> <tt class="py-docstring">"""This class is a convenience for defining the common tftp error codes,</tt> </tt> +<a name="L39"></a><tt class="py-lineno">39</tt> <tt class="py-line"><tt class="py-docstring"> and making them more readable in the code."""</tt> </tt> +<a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"> <tt id="link-12" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.NotDefined=tftpy.TftpShared.TftpErrors-class.html#NotDefined"><a title="tftpy.TftpShared.TftpErrors.NotDefined" class="py-name" href="#" onclick="return doclink('link-12', 'NotDefined', 'link-12');">NotDefined</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L41"></a><tt class="py-lineno">41</tt> <tt class="py-line"> <tt id="link-13" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.FileNotFound=tftpy.TftpShared.TftpErrors-class.html#FileNotFound"><a title="tftpy.TftpShared.TftpErrors.FileNotFound" class="py-name" href="#" onclick="return doclink('link-13', 'FileNotFound', 'link-13');">FileNotFound</a></tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt> +<a name="L42"></a><tt class="py-lineno">42</tt> <tt class="py-line"> <tt id="link-14" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.AccessViolation=tftpy.TftpShared.TftpErrors-class.html#AccessViolation"><a title="tftpy.TftpShared.TftpErrors.AccessViolation" class="py-name" href="#" onclick="return doclink('link-14', 'AccessViolation', 'link-14');">AccessViolation</a></tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> </tt> +<a name="L43"></a><tt class="py-lineno">43</tt> <tt class="py-line"> <tt id="link-15" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.DiskFull=tftpy.TftpShared.TftpErrors-class.html#DiskFull"><a title="tftpy.TftpShared.TftpErrors.DiskFull" class="py-name" href="#" onclick="return doclink('link-15', 'DiskFull', 'link-15');">DiskFull</a></tt> <tt class="py-op">=</tt> <tt class="py-number">3</tt> </tt> +<a name="L44"></a><tt class="py-lineno">44</tt> <tt class="py-line"> <tt id="link-16" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.IllegalTftpOp=tftpy.TftpShared.TftpErrors-class.html#IllegalTftpOp"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-16', 'IllegalTftpOp', 'link-16');">IllegalTftpOp</a></tt> <tt class="py-op">=</tt> <tt class="py-number">4</tt> </tt> +<a name="L45"></a><tt class="py-lineno">45</tt> <tt class="py-line"> <tt id="link-17" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.UnknownTID=tftpy.TftpShared.TftpErrors-class.html#UnknownTID"><a title="tftpy.TftpShared.TftpErrors.UnknownTID" class="py-name" href="#" onclick="return doclink('link-17', 'UnknownTID', 'link-17');">UnknownTID</a></tt> <tt class="py-op">=</tt> <tt class="py-number">5</tt> </tt> +<a name="L46"></a><tt class="py-lineno">46</tt> <tt class="py-line"> <tt id="link-18" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.FileAlreadyExists=tftpy.TftpShared.TftpErrors-class.html#FileAlreadyExists"><a title="tftpy.TftpShared.TftpErrors.FileAlreadyExists" class="py-name" href="#" onclick="return doclink('link-18', 'FileAlreadyExists', 'link-18');">FileAlreadyExists</a></tt> <tt class="py-op">=</tt> <tt class="py-number">6</tt> </tt> +<a name="L47"></a><tt class="py-lineno">47</tt> <tt class="py-line"> <tt id="link-19" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.NoSuchUser=tftpy.TftpShared.TftpErrors-class.html#NoSuchUser"><a title="tftpy.TftpShared.TftpErrors.NoSuchUser" class="py-name" href="#" onclick="return doclink('link-19', 'NoSuchUser', 'link-19');">NoSuchUser</a></tt> <tt class="py-op">=</tt> <tt class="py-number">7</tt> </tt> +<a name="L48"></a><tt class="py-lineno">48</tt> <tt class="py-line"> <tt id="link-20" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.FailedNegotiation=tftpy.TftpShared.TftpErrors-class.html#FailedNegotiation"><a title="tftpy.TftpShared.TftpErrors.FailedNegotiation" class="py-name" href="#" onclick="return doclink('link-20', 'FailedNegotiation', 'link-20');">FailedNegotiation</a></tt> <tt class="py-op">=</tt> <tt class="py-number">8</tt> </tt> +</div><a name="L49"></a><tt class="py-lineno">49</tt> <tt class="py-line"> </tt> +<a name="TftpException"></a><div id="TftpException-def"><a name="L50"></a><tt class="py-lineno">50</tt> <a class="py-toggle" href="#" id="TftpException-toggle" onclick="return toggle('TftpException');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpShared.TftpException-class.html">TftpException</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpException-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="TftpException-expanded"><a name="L51"></a><tt class="py-lineno">51</tt> <tt class="py-line"> <tt class="py-docstring">"""This class is the parent class of all exceptions regarding the handling</tt> </tt> +<a name="L52"></a><tt class="py-lineno">52</tt> <tt class="py-line"><tt class="py-docstring"> of the TFTP protocol."""</tt> </tt> +<a name="L53"></a><tt class="py-lineno">53</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt> +</div><a name="L54"></a><tt class="py-lineno">54</tt> <tt class="py-line"> </tt><script type="text/javascript"> +<!-- +expandto(location.href); +// --> +</script> +</pre> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:22 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpShared.TftpErrors-class.html b/html/tftpy-doc/tftpy.TftpShared.TftpErrors-class.html new file mode 100644 index 0000000..65bd076 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpShared.TftpErrors-class.html @@ -0,0 +1,255 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpShared.TftpErrors</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpShared-module.html">Module TftpShared</a> :: + Class TftpErrors + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpShared.TftpErrors-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpErrors</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpShared-pysrc.html#TftpErrors">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <strong class="uidshort">TftpErrors</strong> +</pre> + +<hr /> +<p>This class is a convenience for defining the common tftp error codes, + and making them more readable in the code.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__init__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== CLASS VARIABLES ==================== --> +<a name="section-ClassVariables"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Class Variables</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-ClassVariables" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="NotDefined"></a><span class="summary-name">NotDefined</span> = <code title="0">0</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="FileNotFound"></a><span class="summary-name">FileNotFound</span> = <code title="1">1</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="AccessViolation"></a><span class="summary-name">AccessViolation</span> = <code title="2">2</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="DiskFull"></a><span class="summary-name">DiskFull</span> = <code title="3">3</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="IllegalTftpOp"></a><span class="summary-name">IllegalTftpOp</span> = <code title="4">4</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="UnknownTID"></a><span class="summary-name">UnknownTID</span> = <code title="5">5</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="FileAlreadyExists"></a><span class="summary-name">FileAlreadyExists</span> = <code title="6">6</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="NoSuchUser"></a><span class="summary-name">NoSuchUser</span> = <code title="7">7</code> + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a name="FailedNegotiation"></a><span class="summary-name">FailedNegotiation</span> = <code title="8">8</code> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpShared.TftpException-class.html b/html/tftpy-doc/tftpy.TftpShared.TftpException-class.html new file mode 100644 index 0000000..a9cef7d --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpShared.TftpException-class.html @@ -0,0 +1,189 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpShared.TftpException</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpShared-module.html">Module TftpShared</a> :: + Class TftpException + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpShared.TftpException-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpException</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpShared-pysrc.html#TftpException">source code</a></span></p> +<pre class="base-tree"> + object --+ + | +exceptions.BaseException --+ + | + exceptions.Exception --+ + | + <strong class="uidshort">TftpException</strong> +</pre> + +<hr /> +<p>This class is the parent class of all exceptions regarding the + handling of the TFTP protocol.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>: + <code>__init__</code>, + <code>__new__</code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__getitem__</code>, + <code>__getslice__</code>, + <code>__reduce__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__setstate__</code>, + <code>__str__</code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__hash__</code>, + <code>__reduce_ex__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>: + <code>args</code>, + <code>message</code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates-module.html b/html/tftpy-doc/tftpy.TftpStates-module.html new file mode 100644 index 0000000..2534bda --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates-module.html @@ -0,0 +1,229 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpStates + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates-module.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== MODULE DESCRIPTION ==================== --> +<h1 class="epydoc">Module TftpStates</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html">source code</a></span></p> +<!-- ==================== CLASSES ==================== --> +<a name="section-Classes"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Classes</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Classes" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpMetrics-class.html" class="summary-name">TftpMetrics</a><br /> + A class representing metrics of the transfer. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpContext-class.html" class="summary-name">TftpContext</a><br /> + The base class of the contexts. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpContextServer-class.html" class="summary-name">TftpContextServer</a><br /> + The context for the server. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpContextClientUpload-class.html" class="summary-name">TftpContextClientUpload</a><br /> + The upload context for the client during an upload. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpContextClientDownload-class.html" class="summary-name">TftpContextClientDownload</a><br /> + The download context for the client during a download. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpState-class.html" class="summary-name">TftpState</a><br /> + The base class for the states. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html" class="summary-name">TftpStateServerRecvRRQ</a><br /> + This class represents the state of the TFTP server when it has just + received an RRQ packet. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html" class="summary-name">TftpStateServerRecvWRQ</a><br /> + This class represents the state of the TFTP server when it has just + received a WRQ packet. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpStateServerStart-class.html" class="summary-name">TftpStateServerStart</a><br /> + The start state for the server. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpStateExpectACK-class.html" class="summary-name">TftpStateExpectACK</a><br /> + This class represents the state of the transfer when a DAT was just + sent, and we are waiting for an ACK from the server. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpStateExpectDAT-class.html" class="summary-name">TftpStateExpectDAT</a><br /> + Just sent an ACK packet. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpStateSentWRQ-class.html" class="summary-name">TftpStateSentWRQ</a><br /> + Just sent an WRQ packet for an upload. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpStateSentRRQ-class.html" class="summary-name">TftpStateSentRRQ</a><br /> + Just sent an RRQ packet. + </td> + </tr> +</table> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates-pysrc.html b/html/tftpy-doc/tftpy.TftpStates-pysrc.html new file mode 100644 index 0000000..93b492d --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates-pysrc.html @@ -0,0 +1,1345 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + Module TftpStates + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates-pysrc.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<h1 class="epydoc">Source Code for <a href="tftpy.TftpStates-module.html">Module tftpy.TftpStates</a></h1> +<pre class="py-src"> +<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Module tftpy.TftpShared=tftpy.TftpShared-module.html"><a title="tftpy.TftpShared" class="py-name" href="#" onclick="return doclink('link-0', 'TftpShared', 'link-0');">TftpShared</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name" targets="Module tftpy.TftpPacketTypes=tftpy.TftpPacketTypes-module.html"><a title="tftpy.TftpPacketTypes" class="py-name" href="#" onclick="return doclink('link-1', 'TftpPacketTypes', 'link-1');">TftpPacketTypes</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-2" class="py-name" targets="Class tftpy.TftpPacketFactory'.TftpPacketFactory=tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html"><a title="tftpy.TftpPacketFactory'.TftpPacketFactory" class="py-name" href="#" onclick="return doclink('link-2', 'TftpPacketFactory', 'link-2');">TftpPacketFactory</a></tt> <tt class="py-keyword">import</tt> <tt class="py-op">*</tt> </tt> +<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">socket</tt><tt class="py-op">,</tt> <tt class="py-name">time</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt> </tt> +<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"> </tt> +<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment">###############################################################################</tt> </tt> +<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Utility classes</tt> </tt> +<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">###############################################################################</tt> </tt> +<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt> +<a name="TftpMetrics"></a><div id="TftpMetrics-def"><a name="L10"></a><tt class="py-lineno"> 10</tt> <a class="py-toggle" href="#" id="TftpMetrics-toggle" onclick="return toggle('TftpMetrics');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpMetrics-class.html">TftpMetrics</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpMetrics-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpMetrics-expanded"><a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"> <tt class="py-docstring">"""A class representing metrics of the transfer."""</tt> </tt> +<a name="TftpMetrics.__init__"></a><div id="TftpMetrics.__init__-def"><a name="L12"></a><tt class="py-lineno"> 12</tt> <a class="py-toggle" href="#" id="TftpMetrics.__init__-toggle" onclick="return toggle('TftpMetrics.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpMetrics-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpMetrics.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpMetrics.__init__-expanded"><a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"> <tt class="py-comment"># Bytes transferred</tt> </tt> +<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bytes</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"> <tt class="py-comment"># Bytes re-sent</tt> </tt> +<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resent_bytes</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> <tt class="py-comment"># Duplicate packets received</tt> </tt> +<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dups</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt> +<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dupcount</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"> <tt class="py-comment"># Times</tt> </tt> +<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">start_time</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">end_time</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">duration</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"> <tt class="py-comment"># Rates</tt> </tt> +<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bps</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kbps</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"> <tt class="py-comment"># Generic errors</tt> </tt> +<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">errors</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +</div><a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"> </tt> +<a name="TftpMetrics.compute"></a><div id="TftpMetrics.compute-def"><a name="L30"></a><tt class="py-lineno"> 30</tt> <a class="py-toggle" href="#" id="TftpMetrics.compute-toggle" onclick="return toggle('TftpMetrics.compute');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpMetrics-class.html#compute">compute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpMetrics.compute-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpMetrics.compute-expanded"><a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> <tt class="py-comment"># Compute transfer time</tt> </tt> +<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">duration</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">end_time</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">start_time</tt> </tt> +<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"> <tt id="link-3" class="py-name" targets="Variable tftpy.TftpClient'.log=tftpy.TftpClient%27-module.html#log,Variable tftpy.TftpPacketFactory'.log=tftpy.TftpPacketFactory%27-module.html#log,Variable tftpy.TftpServer'.log=tftpy.TftpServer%27-module.html#log,Variable tftpy.TftpShared.log=tftpy.TftpShared-module.html#log"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-3', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"TftpMetrics.compute: duration is %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">duration</tt><tt class="py-op">)</tt> </tt> +<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bps</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bytes</tt> <tt class="py-op">*</tt> <tt class="py-number">8.0</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">duration</tt> </tt> +<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kbps</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">bps</tt> <tt class="py-op">/</tt> <tt class="py-number">1024.0</tt> </tt> +<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"> <tt id="link-4" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-4', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"TftpMetrics.compute: kbps is %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kbps</tt><tt class="py-op">)</tt> </tt> +<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dups</tt><tt class="py-op">:</tt> </tt> +<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dupcount</tt> <tt class="py-op">+=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dups</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt> +</div><a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"> </tt> +<a name="TftpMetrics.add_dup"></a><div id="TftpMetrics.add_dup-def"><a name="L40"></a><tt class="py-lineno"> 40</tt> <a class="py-toggle" href="#" id="TftpMetrics.add_dup-toggle" onclick="return toggle('TftpMetrics.add_dup');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpMetrics-class.html#add_dup">add_dup</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">blocknumber</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpMetrics.add_dup-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpMetrics.add_dup-expanded"><a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> <tt class="py-docstring">"""This method adds a dup for a block number to the metrics."""</tt> </tt> +<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"> <tt id="link-5" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-5', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Recording a dup for block %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dups</tt><tt class="py-op">.</tt><tt class="py-name">has_key</tt><tt class="py-op">(</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dups</tt><tt class="py-op">[</tt><tt class="py-name">blocknumber</tt><tt class="py-op">]</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt> +<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dups</tt><tt class="py-op">[</tt><tt class="py-name">blocknumber</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt> +<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt id="link-6" class="py-name" targets="Function tftpy.TftpShared.tftpassert()=tftpy.TftpShared-module.html#tftpassert"><a title="tftpy.TftpShared.tftpassert" class="py-name" href="#" onclick="return doclink('link-6', 'tftpassert', 'link-6');">tftpassert</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dups</tt><tt class="py-op">[</tt><tt class="py-name">blocknumber</tt><tt class="py-op">]</tt> <tt class="py-op"><</tt> <tt id="link-7" class="py-name" targets="Variable tftpy.TftpClient'.MAX_DUPS=tftpy.TftpClient%27-module.html#MAX_DUPS,Variable tftpy.TftpPacketFactory'.MAX_DUPS=tftpy.TftpPacketFactory%27-module.html#MAX_DUPS,Variable tftpy.TftpServer'.MAX_DUPS=tftpy.TftpServer%27-module.html#MAX_DUPS,Variable tftpy.TftpShared.MAX_DUPS=tftpy.TftpShared-module.html#MAX_DUPS"><a title="tftpy.TftpClient'.MAX_DUPS +tftpy.TftpPacketFactory'.MAX_DUPS +tftpy.TftpServer'.MAX_DUPS +tftpy.TftpShared.MAX_DUPS" class="py-name" href="#" onclick="return doclink('link-7', 'MAX_DUPS', 'link-7');">MAX_DUPS</a></tt><tt class="py-op">,</tt> </tt> +<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-string">"Max duplicates for block %d reached"</tt> <tt class="py-op">%</tt> <tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> </tt> +<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-comment">###############################################################################</tt> </tt> +<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Context classes</tt> </tt> +<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">###############################################################################</tt> </tt> +<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt> +<a name="TftpContext"></a><div id="TftpContext-def"><a name="L54"></a><tt class="py-lineno"> 54</tt> <a class="py-toggle" href="#" id="TftpContext-toggle" onclick="return toggle('TftpContext');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContext-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpContext-expanded"><a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-docstring">"""The base class of the contexts."""</tt> </tt> +<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> </tt> +<a name="TftpContext.__init__"></a><div id="TftpContext.__init__-def"><a name="L57"></a><tt class="py-lineno"> 57</tt> <a class="py-toggle" href="#" id="TftpContext.__init__-toggle" onclick="return toggle('TftpContext.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContext-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">host</tt><tt class="py-op">,</tt> <tt class="py-param">port</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContext.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContext.__init__-expanded"><a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> <tt class="py-docstring">"""Constructor for the base context, setting shared instance</tt> </tt> +<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> variables."""</tt> </tt> +<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fileobj</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name" targets="Variable tftpy.TftpPacketTypes.TftpPacketWithOptions.options=tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#options"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-8', 'options', 'link-8');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">packethook</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">socket</tt><tt class="py-op">(</tt><tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">AF_INET</tt><tt class="py-op">,</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">SOCK_DGRAM</tt><tt class="py-op">)</tt> </tt> +<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">.</tt><tt class="py-name">settimeout</tt><tt class="py-op">(</tt><tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt> +<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Variable tftpy.TftpStates.TftpContext.next_block=tftpy.TftpStates.TftpContext-class.html#next_block"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-9', 'next_block', 'link-9');">next_block</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">factory</tt> <tt class="py-op">=</tt> <tt id="link-10" class="py-name"><a title="tftpy.TftpPacketFactory'.TftpPacketFactory" class="py-name" href="#" onclick="return doclink('link-10', 'TftpPacketFactory', 'link-2');">TftpPacketFactory</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-comment"># Note, setting the host will also set self.address, as it's a property.</tt> </tt> +<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Variable tftpy.TftpStates.TftpContext.host=tftpy.TftpStates.TftpContext-class.html#host"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-11', 'host', 'link-11');">host</a></tt> <tt class="py-op">=</tt> <tt id="link-12" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-12', 'host', 'link-11');">host</a></tt> </tt> +<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt> <tt class="py-op">=</tt> <tt class="py-name">port</tt> </tt> +<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-comment"># The port associated with the TID</tt> </tt> +<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-comment"># Metrics</tt> </tt> +<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt> <tt class="py-op">=</tt> <tt id="link-13" class="py-name" targets="Class tftpy.TftpStates.TftpMetrics=tftpy.TftpStates.TftpMetrics-class.html"><a title="tftpy.TftpStates.TftpMetrics" class="py-name" href="#" onclick="return doclink('link-13', 'TftpMetrics', 'link-13');">TftpMetrics</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-comment"># Flag when the transfer is pending completion.</tt> </tt> +<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pending_complete</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt> +<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-comment"># Time when this context last received any traffic.</tt> </tt> +<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># FIXME: does this belong in metrics?</tt> </tt> +<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_update</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-comment"># The last DAT packet we sent, if applicable, to make resending easy.</tt> </tt> +<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_dat_pkt</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +</div><a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> </tt> +<a name="TftpContext.checkTimeout"></a><div id="TftpContext.checkTimeout-def"><a name="L84"></a><tt class="py-lineno"> 84</tt> <a class="py-toggle" href="#" id="TftpContext.checkTimeout-toggle" onclick="return toggle('TftpContext.checkTimeout');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContext-class.html#checkTimeout">checkTimeout</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">now</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContext.checkTimeout-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContext.checkTimeout-expanded"><a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-docstring">"""Compare current time with last_update time, and raise an exception</tt> </tt> +<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"><tt class="py-docstring"> if we're over SOCK_TIMEOUT time."""</tt> </tt> +<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">now</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_update</tt> <tt class="py-op">></tt> <tt id="link-14" class="py-name" targets="Variable tftpy.TftpClient'.SOCK_TIMEOUT=tftpy.TftpClient%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpPacketFactory'.SOCK_TIMEOUT=tftpy.TftpPacketFactory%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpServer'.SOCK_TIMEOUT=tftpy.TftpServer%27-module.html#SOCK_TIMEOUT,Variable tftpy.TftpShared.SOCK_TIMEOUT=tftpy.TftpShared-module.html#SOCK_TIMEOUT"><a title="tftpy.TftpClient'.SOCK_TIMEOUT +tftpy.TftpPacketFactory'.SOCK_TIMEOUT +tftpy.TftpServer'.SOCK_TIMEOUT +tftpy.TftpShared.SOCK_TIMEOUT" class="py-name" href="#" onclick="return doclink('link-14', 'SOCK_TIMEOUT', 'link-14');">SOCK_TIMEOUT</a></tt><tt class="py-op">:</tt> </tt> +<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-15" class="py-name" targets="Class tftpy.TftpShared.TftpException=tftpy.TftpShared.TftpException-class.html"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-15', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Timeout waiting for traffic"</tt> </tt> +</div><a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> </tt> +<a name="TftpContext.start"></a><div id="TftpContext.start-def"><a name="L90"></a><tt class="py-lineno"> 90</tt> <a class="py-toggle" href="#" id="TftpContext.start-toggle" onclick="return toggle('TftpContext.start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContext-class.html#start">start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContext.start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContext.start-expanded"><a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">,</tt> <tt class="py-string">"Abstract method"</tt> </tt> +</div><a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> </tt> +<a name="TftpContext.end"></a><div id="TftpContext.end-def"><a name="L93"></a><tt class="py-lineno"> 93</tt> <a class="py-toggle" href="#" id="TftpContext.end-toggle" onclick="return toggle('TftpContext.end');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContext-class.html#end">end</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContext.end-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContext.end-expanded"><a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">,</tt> <tt class="py-string">"Abstract method"</tt> </tt> +</div><a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> </tt> +<a name="TftpContext.gethost"></a><div id="TftpContext.gethost-def"><a name="L96"></a><tt class="py-lineno"> 96</tt> <a class="py-toggle" href="#" id="TftpContext.gethost-toggle" onclick="return toggle('TftpContext.gethost');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContext-class.html#gethost">gethost</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContext.gethost-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContext.gethost-expanded"><a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-docstring">"Simple getter method for use in a property."</tt> </tt> +<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__host</tt> </tt> +</div><a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> </tt> +<a name="TftpContext.sethost"></a><div id="TftpContext.sethost-def"><a name="L100"></a><tt class="py-lineno">100</tt> <a class="py-toggle" href="#" id="TftpContext.sethost-toggle" onclick="return toggle('TftpContext.sethost');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContext-class.html#sethost">sethost</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">host</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContext.sethost-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContext.sethost-expanded"><a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-docstring">"""Setter method that also sets the address property as a result</tt> </tt> +<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"><tt class="py-docstring"> of the host that is set."""</tt> </tt> +<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__host</tt> <tt class="py-op">=</tt> <tt id="link-16" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-16', 'host', 'link-11');">host</a></tt> </tt> +<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">address</tt> <tt class="py-op">=</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">gethostbyname</tt><tt class="py-op">(</tt><tt id="link-17" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-17', 'host', 'link-11');">host</a></tt><tt class="py-op">)</tt> </tt> +</div><a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> </tt> +<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt id="link-18" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-18', 'host', 'link-11');">host</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt id="link-19" class="py-name" targets="Method tftpy.TftpStates.TftpContext.gethost()=tftpy.TftpStates.TftpContext-class.html#gethost"><a title="tftpy.TftpStates.TftpContext.gethost" class="py-name" href="#" onclick="return doclink('link-19', 'gethost', 'link-19');">gethost</a></tt><tt class="py-op">,</tt> <tt id="link-20" class="py-name" targets="Method tftpy.TftpStates.TftpContext.sethost()=tftpy.TftpStates.TftpContext-class.html#sethost"><a title="tftpy.TftpStates.TftpContext.sethost" class="py-name" href="#" onclick="return doclink('link-20', 'sethost', 'link-20');">sethost</a></tt><tt class="py-op">)</tt> </tt> +<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> </tt> +<a name="TftpContext.setNextBlock"></a><div id="TftpContext.setNextBlock-def"><a name="L108"></a><tt class="py-lineno">108</tt> <a class="py-toggle" href="#" id="TftpContext.setNextBlock-toggle" onclick="return toggle('TftpContext.setNextBlock');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContext-class.html#setNextBlock">setNextBlock</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">block</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContext.setNextBlock-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContext.setNextBlock-expanded"><a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">block</tt> <tt class="py-op">></tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-number">16</tt><tt class="py-op">:</tt> </tt> +<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt id="link-21" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-21', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Block number rollover to 0 again"</tt><tt class="py-op">)</tt> </tt> +<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-name">block</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt> +<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__eblock</tt> <tt class="py-op">=</tt> <tt class="py-name">block</tt> </tt> +</div><a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> </tt> +<a name="TftpContext.getNextBlock"></a><div id="TftpContext.getNextBlock-def"><a name="L114"></a><tt class="py-lineno">114</tt> <a class="py-toggle" href="#" id="TftpContext.getNextBlock-toggle" onclick="return toggle('TftpContext.getNextBlock');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContext-class.html#getNextBlock">getNextBlock</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContext.getNextBlock-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContext.getNextBlock-expanded"><a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__eblock</tt> </tt> +</div><a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> </tt> +<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt id="link-22" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-22', 'next_block', 'link-9');">next_block</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt id="link-23" class="py-name" targets="Method tftpy.TftpStates.TftpContext.getNextBlock()=tftpy.TftpStates.TftpContext-class.html#getNextBlock"><a title="tftpy.TftpStates.TftpContext.getNextBlock" class="py-name" href="#" onclick="return doclink('link-23', 'getNextBlock', 'link-23');">getNextBlock</a></tt><tt class="py-op">,</tt> <tt id="link-24" class="py-name" targets="Method tftpy.TftpStates.TftpContext.setNextBlock()=tftpy.TftpStates.TftpContext-class.html#setNextBlock"><a title="tftpy.TftpStates.TftpContext.setNextBlock" class="py-name" href="#" onclick="return doclink('link-24', 'setNextBlock', 'link-24');">setNextBlock</a></tt><tt class="py-op">)</tt> </tt> +<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> </tt> +<a name="TftpContext.cycle"></a><div id="TftpContext.cycle-def"><a name="L119"></a><tt class="py-lineno">119</tt> <a class="py-toggle" href="#" id="TftpContext.cycle-toggle" onclick="return toggle('TftpContext.cycle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContext-class.html#cycle">cycle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContext.cycle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContext.cycle-expanded"><a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-docstring">"""Here we wait for a response from the server after sending it</tt> </tt> +<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"><tt class="py-docstring"> something, and dispatch appropriate action to that response."""</tt> </tt> +<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: This won't work very well in a server context with multiple</tt> </tt> +<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># sessions running.</tt> </tt> +<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt id="link-25" class="py-name" targets="Variable tftpy.TftpClient'.TIMEOUT_RETRIES=tftpy.TftpClient%27-module.html#TIMEOUT_RETRIES,Variable tftpy.TftpPacketFactory'.TIMEOUT_RETRIES=tftpy.TftpPacketFactory%27-module.html#TIMEOUT_RETRIES,Variable tftpy.TftpServer'.TIMEOUT_RETRIES=tftpy.TftpServer%27-module.html#TIMEOUT_RETRIES,Variable tftpy.TftpShared.TIMEOUT_RETRIES=tftpy.TftpShared-module.html#TIMEOUT_RETRIES"><a title="tftpy.TftpClient'.TIMEOUT_RETRIES +tftpy.TftpPacketFactory'.TIMEOUT_RETRIES +tftpy.TftpServer'.TIMEOUT_RETRIES +tftpy.TftpShared.TIMEOUT_RETRIES" class="py-name" href="#" onclick="return doclink('link-25', 'TIMEOUT_RETRIES', 'link-25');">TIMEOUT_RETRIES</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt id="link-26" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-26', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"In cycle, receive attempt %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt><tt class="py-op">)</tt> </tt> +<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">raddress</tt><tt class="py-op">,</tt> <tt class="py-name">rport</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">.</tt><tt class="py-name">recvfrom</tt><tt class="py-op">(</tt><tt id="link-27" class="py-name" targets="Variable tftpy.TftpClient'.MAX_BLKSIZE=tftpy.TftpClient%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpPacketFactory'.MAX_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpServer'.MAX_BLKSIZE=tftpy.TftpServer%27-module.html#MAX_BLKSIZE,Variable tftpy.TftpShared.MAX_BLKSIZE=tftpy.TftpShared-module.html#MAX_BLKSIZE"><a title="tftpy.TftpClient'.MAX_BLKSIZE +tftpy.TftpPacketFactory'.MAX_BLKSIZE +tftpy.TftpServer'.MAX_BLKSIZE +tftpy.TftpShared.MAX_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-27', 'MAX_BLKSIZE', 'link-27');">MAX_BLKSIZE</a></tt><tt class="py-op">)</tt> </tt> +<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">timeout</tt><tt class="py-op">,</tt> <tt class="py-name">err</tt><tt class="py-op">:</tt> </tt> +<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"> <tt id="link-28" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-28', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Timeout waiting for traffic, retrying..."</tt><tt class="py-op">)</tt> </tt> +<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt> +<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt> +<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-29" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-29', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Hit max timeouts, giving up."</tt> </tt> +<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> </tt> +<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-comment"># Ok, we've received a packet. Log it.</tt> </tt> +<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-30" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-30', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Received %d bytes from %s:%s"</tt> </tt> +<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">raddress</tt><tt class="py-op">,</tt> <tt class="py-name">rport</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-comment"># And update our last updated time.</tt> </tt> +<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_update</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> </tt> +<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-comment"># Decode it.</tt> </tt> +<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">recvpkt</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">factory</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method tftpy.TftpPacketFactory'.TftpPacketFactory.parse()=tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#parse"><a title="tftpy.TftpPacketFactory'.TftpPacketFactory.parse" class="py-name" href="#" onclick="return doclink('link-31', 'parse', 'link-31');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt> </tt> +<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> </tt> +<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-comment"># Check for known "connection".</tt> </tt> +<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">raddress</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">address</tt><tt class="py-op">:</tt> </tt> +<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt id="link-32" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-32', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Received traffic from %s, expected host %s. Discarding"</tt> </tt> +<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">raddress</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-33', 'host', 'link-11');">host</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> </tt> +<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt> <tt class="py-op">!=</tt> <tt class="py-name">rport</tt><tt class="py-op">:</tt> </tt> +<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"> <tt id="link-34" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-34', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Received traffic from %s:%s but we're "</tt> </tt> +<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-string">"connected to %s:%s. Discarding."</tt> </tt> +<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">raddress</tt><tt class="py-op">,</tt> <tt class="py-name">rport</tt><tt class="py-op">,</tt> </tt> +<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-35', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> </tt> +<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-comment"># If there is a packethook defined, call it. We unconditionally</tt> </tt> +<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># pass all packets, it's up to the client to screen out different</tt> </tt> +<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># kinds of packets. This way, the client is privy to things like</tt> </tt> +<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># negotiated options.</tt> </tt> +<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">packethook</tt><tt class="py-op">:</tt> </tt> +<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">packethook</tt><tt class="py-op">(</tt><tt class="py-name">recvpkt</tt><tt class="py-op">)</tt> </tt> +<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> </tt> +<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-comment"># And handle it, possibly changing state.</tt> </tt> +<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method tftpy.TftpStates.TftpState.handle()=tftpy.TftpStates.TftpState-class.html#handle,Method tftpy.TftpStates.TftpStateExpectACK.handle()=tftpy.TftpStates.TftpStateExpectACK-class.html#handle,Method tftpy.TftpStates.TftpStateExpectDAT.handle()=tftpy.TftpStates.TftpStateExpectDAT-class.html#handle,Method tftpy.TftpStates.TftpStateSentRRQ.handle()=tftpy.TftpStates.TftpStateSentRRQ-class.html#handle,Method tftpy.TftpStates.TftpStateSentWRQ.handle()=tftpy.TftpStates.TftpStateSentWRQ-class.html#handle,Method tftpy.TftpStates.TftpStateServerRecvRRQ.handle()=tftpy.TftpStates.TftpStateServerRecvRRQ-class.html#handle,Method tftpy.TftpStates.TftpStateServerRecvWRQ.handle()=tftpy.TftpStates.TftpStateServerRecvWRQ-class.html#handle,Method tftpy.TftpStates.TftpStateServerStart.handle()=tftpy.TftpStates.TftpStateServerStart-class.html#handle"><a title="tftpy.TftpStates.TftpState.handle +tftpy.TftpStates.TftpStateExpectACK.handle +tftpy.TftpStates.TftpStateExpectDAT.handle +tftpy.TftpStates.TftpStateSentRRQ.handle +tftpy.TftpStates.TftpStateSentWRQ.handle +tftpy.TftpStates.TftpStateServerRecvRRQ.handle +tftpy.TftpStates.TftpStateServerRecvWRQ.handle +tftpy.TftpStates.TftpStateServerStart.handle" class="py-name" href="#" onclick="return doclink('link-36', 'handle', 'link-36');">handle</a></tt><tt class="py-op">(</tt><tt class="py-name">recvpkt</tt><tt class="py-op">,</tt> <tt class="py-name">raddress</tt><tt class="py-op">,</tt> <tt class="py-name">rport</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> </tt> +<a name="TftpContextServer"></a><div id="TftpContextServer-def"><a name="L165"></a><tt class="py-lineno">165</tt> <a class="py-toggle" href="#" id="TftpContextServer-toggle" onclick="return toggle('TftpContextServer');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextServer-class.html">TftpContextServer</a><tt class="py-op">(</tt><tt class="py-base-class">TftpContext</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextServer-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpContextServer-expanded"><a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-docstring">"""The context for the server."""</tt> </tt> +<a name="TftpContextServer.__init__"></a><div id="TftpContextServer.__init__-def"><a name="L167"></a><tt class="py-lineno">167</tt> <a class="py-toggle" href="#" id="TftpContextServer.__init__-toggle" onclick="return toggle('TftpContextServer.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextServer-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">host</tt><tt class="py-op">,</tt> <tt class="py-param">port</tt><tt class="py-op">,</tt> <tt class="py-param">timeout</tt><tt class="py-op">,</tt> <tt class="py-param">root</tt><tt class="py-op">,</tt> <tt class="py-param">dyn_file_func</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextServer.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContextServer.__init__-expanded"><a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt id="link-37" class="py-name" targets="Class tftpy.TftpStates.TftpContext=tftpy.TftpStates.TftpContext-class.html"><a title="tftpy.TftpStates.TftpContext" class="py-name" href="#" onclick="return doclink('link-37', 'TftpContext', 'link-37');">TftpContext</a></tt><tt class="py-op">.</tt><tt id="link-38" class="py-name" targets="Method tftpy.TftpClient'.TftpClient.__init__()=tftpy.TftpClient%27.TftpClient-class.html#__init__,Method tftpy.TftpPacketFactory'.TftpPacketFactory.__init__()=tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacket.__init__()=tftpy.TftpPacketTypes.TftpPacket-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketACK.__init__()=tftpy.TftpPacketTypes.TftpPacketACK-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketDAT.__init__()=tftpy.TftpPacketTypes.TftpPacketDAT-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketERR.__init__()=tftpy.TftpPacketTypes.TftpPacketERR-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketInitial.__init__()=tftpy.TftpPacketTypes.TftpPacketInitial-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketOACK.__init__()=tftpy.TftpPacketTypes.TftpPacketOACK-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketRRQ.__init__()=tftpy.TftpPacketTypes.TftpPacketRRQ-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketWRQ.__init__()=tftpy.TftpPacketTypes.TftpPacketWRQ-class.html#__init__,Method tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__()=tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html#__init__,Method tftpy.TftpServer'.TftpServer.__init__()=tftpy.TftpServer%27.TftpServer-class.html#__init__,Method tftpy.TftpStates.TftpContext.__init__()=tftpy.TftpStates.TftpContext-class.html#__init__,Method tftpy.TftpStates.TftpContextClientDownload.__init__()=tftpy.TftpStates.TftpContextClientDownload-class.html#__init__,Method tftpy.TftpStates.TftpContextClientUpload.__init__()=tftpy.TftpStates.TftpContextClientUpload-class.html#__init__,Method tftpy.TftpStates.TftpContextServer.__init__()=tftpy.TftpStates.TftpContextServer-class.html#__init__,Method tftpy.TftpStates.TftpMetrics.__init__()=tftpy.TftpStates.TftpMetrics-class.html#__init__,Method tftpy.TftpStates.TftpState.__init__()=tftpy.TftpStates.TftpState-class.html#__init__"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-38', '__init__', 'link-38');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> </tt> +<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt id="link-39" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-39', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> </tt> +<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> <tt class="py-name">port</tt><tt class="py-op">,</tt> </tt> +<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt> +<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-comment"># At this point we have no idea if this is a download or an upload. We</tt> </tt> +<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># need to let the start state determine that.</tt> </tt> +<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt> <tt class="py-op">=</tt> <tt id="link-40" class="py-name" targets="Class tftpy.TftpStates.TftpStateServerStart=tftpy.TftpStates.TftpStateServerStart-class.html"><a title="tftpy.TftpStates.TftpStateServerStart" class="py-name" href="#" onclick="return doclink('link-40', 'TftpStateServerStart', 'link-40');">TftpStateServerStart</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">=</tt> <tt class="py-name">root</tt> </tt> +<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dyn_file_func</tt> <tt class="py-op">=</tt> <tt class="py-name">dyn_file_func</tt> </tt> +<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-comment"># In a server, the tidport is the same as the port. This is also true</tt> </tt> +<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># with symmetric UDP, which we haven't implemented yet.</tt> </tt> +<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt> <tt class="py-op">=</tt> <tt class="py-name">port</tt> </tt> +</div><a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> </tt> +<a name="TftpContextServer.start"></a><div id="TftpContextServer.start-def"><a name="L181"></a><tt class="py-lineno">181</tt> <a class="py-toggle" href="#" id="TftpContextServer.start-toggle" onclick="return toggle('TftpContextServer.start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextServer-class.html#start">start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">buffer</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextServer.start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContextServer.start-expanded"><a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-docstring">"""Start the state cycle. Note that the server context receives an</tt> </tt> +<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"><tt class="py-docstring"> initial packet in its start method. Also note that the server does not</tt> </tt> +<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"><tt class="py-docstring"> loop on cycle(), as it expects the TftpServer object to manage</tt> </tt> +<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"><tt class="py-docstring"> that."""</tt> </tt> +<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> <tt id="link-41" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-41', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"In TftpContextServer.start"</tt><tt class="py-op">)</tt> </tt> +<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">start_time</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt id="link-42" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-42', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Set metrics.start_time to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">start_time</tt><tt class="py-op">)</tt> </tt> +<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-comment"># And update our last updated time.</tt> </tt> +<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">last_update</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> </tt> +<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-name">pkt</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">factory</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name"><a title="tftpy.TftpPacketFactory'.TftpPacketFactory.parse" class="py-name" href="#" onclick="return doclink('link-43', 'parse', 'link-31');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt> </tt> +<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt id="link-44" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-44', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"TftpContextServer.start() - factory returned a %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> </tt> +<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-comment"># Call handle once with the initial packet. This should put us into</tt> </tt> +<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># the download or the upload state.</tt> </tt> +<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="tftpy.TftpStates.TftpState.handle +tftpy.TftpStates.TftpStateExpectACK.handle +tftpy.TftpStates.TftpStateExpectDAT.handle +tftpy.TftpStates.TftpStateSentRRQ.handle +tftpy.TftpStates.TftpStateSentWRQ.handle +tftpy.TftpStates.TftpStateServerRecvRRQ.handle +tftpy.TftpStates.TftpStateServerRecvWRQ.handle +tftpy.TftpStates.TftpStateServerStart.handle" class="py-name" href="#" onclick="return doclink('link-45', 'handle', 'link-36');">handle</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> </tt> +<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-46', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> </tt> +<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">)</tt> </tt> +</div><a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> </tt> +<a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-comment"># FIXME</tt> </tt> +<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># How do we ensure that the server closes files, even on error?</tt> </tt> +<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt> +<a name="TftpContextServer.end"></a><div id="TftpContextServer.end-def"><a name="L204"></a><tt class="py-lineno">204</tt> <a class="py-toggle" href="#" id="TftpContextServer.end-toggle" onclick="return toggle('TftpContextServer.end');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextServer-class.html#end">end</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextServer.end-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContextServer.end-expanded"><a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-docstring">"""Finish up the context."""</tt> </tt> +<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">end_time</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"> <tt id="link-47" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-47', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Set metrics.end_time to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">end_time</tt><tt class="py-op">)</tt> </tt> +<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name" targets="Method tftpy.TftpStates.TftpMetrics.compute()=tftpy.TftpStates.TftpMetrics-class.html#compute"><a title="tftpy.TftpStates.TftpMetrics.compute" class="py-name" href="#" onclick="return doclink('link-48', 'compute', 'link-48');">compute</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> </tt> +<a name="TftpContextClientUpload"></a><div id="TftpContextClientUpload-def"><a name="L210"></a><tt class="py-lineno">210</tt> <a class="py-toggle" href="#" id="TftpContextClientUpload-toggle" onclick="return toggle('TftpContextClientUpload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextClientUpload-class.html">TftpContextClientUpload</a><tt class="py-op">(</tt><tt class="py-base-class">TftpContext</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextClientUpload-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpContextClientUpload-expanded"><a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-docstring">"""The upload context for the client during an upload."""</tt> </tt> +<a name="TftpContextClientUpload.__init__"></a><div id="TftpContextClientUpload.__init__-def"><a name="L212"></a><tt class="py-lineno">212</tt> <a class="py-toggle" href="#" id="TftpContextClientUpload.__init__-toggle" onclick="return toggle('TftpContextClientUpload.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextClientUpload-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> </tt> +<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-param">host</tt><tt class="py-op">,</tt> </tt> +<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-param">port</tt><tt class="py-op">,</tt> </tt> +<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-param">filename</tt><tt class="py-op">,</tt> </tt> +<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-param">input</tt><tt class="py-op">,</tt> </tt> +<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-param">options</tt><tt class="py-op">,</tt> </tt> +<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-param">packethook</tt><tt class="py-op">,</tt> </tt> +<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextClientUpload.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContextClientUpload.__init__-expanded"><a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt id="link-49" class="py-name"><a title="tftpy.TftpStates.TftpContext" class="py-name" href="#" onclick="return doclink('link-49', 'TftpContext', 'link-37');">TftpContext</a></tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-50', '__init__', 'link-38');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> </tt> +<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> <tt id="link-51" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-51', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> </tt> +<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-name">port</tt><tt class="py-op">,</tt> </tt> +<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt> +<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt> <tt class="py-op">=</tt> <tt class="py-name">filename</tt> </tt> +<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-52', 'options', 'link-8');">options</a></tt> <tt class="py-op">=</tt> <tt id="link-53" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-53', 'options', 'link-8');">options</a></tt> </tt> +<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">packethook</tt> <tt class="py-op">=</tt> <tt class="py-name">packethook</tt> </tt> +<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fileobj</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">input</tt><tt class="py-op">,</tt> <tt class="py-string">"wb"</tt><tt class="py-op">)</tt> </tt> +<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"> </tt> +<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt id="link-54" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-54', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"TftpContextClientUpload.__init__()"</tt><tt class="py-op">)</tt> </tt> +<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"> <tt id="link-55" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-55', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"file_to_transfer = %s, options = %s"</tt> <tt class="py-op">%</tt> </tt> +<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-56', 'options', 'link-8');">options</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +</div><a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"> </tt> +<a name="TftpContextClientUpload.start"></a><div id="TftpContextClientUpload.start-def"><a name="L233"></a><tt class="py-lineno">233</tt> <a class="py-toggle" href="#" id="TftpContextClientUpload.start-toggle" onclick="return toggle('TftpContextClientUpload.start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextClientUpload-class.html#start">start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextClientUpload.start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContextClientUpload.start-expanded"><a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt id="link-57" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-57', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Sending tftp upload request to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-58', 'host', 'link-11');">host</a></tt><tt class="py-op">)</tt> </tt> +<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt id="link-59" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-59', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">" filename -> %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt><tt class="py-op">)</tt> </tt> +<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt id="link-60" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-60', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">" options -> %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-61', 'options', 'link-8');">options</a></tt><tt class="py-op">)</tt> </tt> +<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> </tt> +<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">start_time</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt id="link-62" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-62', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Set metrics.start_time to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">start_time</tt><tt class="py-op">)</tt> </tt> +<a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> </tt> +<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: put this in a sendWRQ method?</tt> </tt> +<a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">pkt</tt> <tt class="py-op">=</tt> <tt id="link-63" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketWRQ=tftpy.TftpPacketTypes.TftpPacketWRQ-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketWRQ" class="py-name" href="#" onclick="return doclink('link-63', 'TftpPacketWRQ', 'link-63');">TftpPacketWRQ</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt> </tt> +<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt> <tt class="py-op">=</tt> <tt class="py-string">"octet"</tt> <tt class="py-comment"># FIXME - shouldn't hardcode this</tt> </tt> +<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-64', 'options', 'link-8');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-65', 'options', 'link-8');">options</a></tt> </tt> +<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">.</tt><tt class="py-name">sendto</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name" targets="Method tftpy.TftpPacketTypes.TftpPacket.encode()=tftpy.TftpPacketTypes.TftpPacket-class.html#encode,Method tftpy.TftpPacketTypes.TftpPacketACK.encode()=tftpy.TftpPacketTypes.TftpPacketACK-class.html#encode,Method tftpy.TftpPacketTypes.TftpPacketDAT.encode()=tftpy.TftpPacketTypes.TftpPacketDAT-class.html#encode,Method tftpy.TftpPacketTypes.TftpPacketERR.encode()=tftpy.TftpPacketTypes.TftpPacketERR-class.html#encode,Method tftpy.TftpPacketTypes.TftpPacketInitial.encode()=tftpy.TftpPacketTypes.TftpPacketInitial-class.html#encode,Method tftpy.TftpPacketTypes.TftpPacketOACK.encode()=tftpy.TftpPacketTypes.TftpPacketOACK-class.html#encode"><a title="tftpy.TftpPacketTypes.TftpPacket.encode +tftpy.TftpPacketTypes.TftpPacketACK.encode +tftpy.TftpPacketTypes.TftpPacketDAT.encode +tftpy.TftpPacketTypes.TftpPacketERR.encode +tftpy.TftpPacketTypes.TftpPacketInitial.encode +tftpy.TftpPacketTypes.TftpPacketOACK.encode" class="py-name" href="#" onclick="return doclink('link-66', 'encode', 'link-66');">encode</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-67', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-68', 'next_block', 'link-9');">next_block</a></tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt> +<a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> </tt> +<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt> <tt class="py-op">=</tt> <tt id="link-69" class="py-name" targets="Class tftpy.TftpStates.TftpStateSentWRQ=tftpy.TftpStates.TftpStateSentWRQ-class.html"><a title="tftpy.TftpStates.TftpStateSentWRQ" class="py-name" href="#" onclick="return doclink('link-69', 'TftpStateSentWRQ', 'link-69');">TftpStateSentWRQ</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> </tt> +<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt><tt class="py-op">:</tt> </tt> +<a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt id="link-70" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-70', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"State is %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt><tt class="py-op">)</tt> </tt> +<a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name" targets="Method tftpy.TftpStates.TftpContext.cycle()=tftpy.TftpStates.TftpContext-class.html#cycle"><a title="tftpy.TftpStates.TftpContext.cycle" class="py-name" href="#" onclick="return doclink('link-71', 'cycle', 'link-71');">cycle</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt> +<a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fileobj</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +</div><a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> </tt> +<a name="TftpContextClientUpload.end"></a><div id="TftpContextClientUpload.end-def"><a name="L258"></a><tt class="py-lineno">258</tt> <a class="py-toggle" href="#" id="TftpContextClientUpload.end-toggle" onclick="return toggle('TftpContextClientUpload.end');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextClientUpload-class.html#end">end</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextClientUpload.end-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContextClientUpload.end-expanded"><a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-docstring">"""Finish up the context."""</tt> </tt> +<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">end_time</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> <tt id="link-72" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-72', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Set metrics.end_time to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">end_time</tt><tt class="py-op">)</tt> </tt> +<a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="tftpy.TftpStates.TftpMetrics.compute" class="py-name" href="#" onclick="return doclink('link-73', 'compute', 'link-48');">compute</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> </tt> +<a name="TftpContextClientDownload"></a><div id="TftpContextClientDownload-def"><a name="L264"></a><tt class="py-lineno">264</tt> <a class="py-toggle" href="#" id="TftpContextClientDownload-toggle" onclick="return toggle('TftpContextClientDownload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextClientDownload-class.html">TftpContextClientDownload</a><tt class="py-op">(</tt><tt class="py-base-class">TftpContext</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextClientDownload-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpContextClientDownload-expanded"><a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-docstring">"""The download context for the client during a download."""</tt> </tt> +<a name="TftpContextClientDownload.__init__"></a><div id="TftpContextClientDownload.__init__-def"><a name="L266"></a><tt class="py-lineno">266</tt> <a class="py-toggle" href="#" id="TftpContextClientDownload.__init__-toggle" onclick="return toggle('TftpContextClientDownload.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextClientDownload-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> </tt> +<a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-param">host</tt><tt class="py-op">,</tt> </tt> +<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-param">port</tt><tt class="py-op">,</tt> </tt> +<a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-param">filename</tt><tt class="py-op">,</tt> </tt> +<a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-param">output</tt><tt class="py-op">,</tt> </tt> +<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-param">options</tt><tt class="py-op">,</tt> </tt> +<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> <tt class="py-param">packethook</tt><tt class="py-op">,</tt> </tt> +<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-param">timeout</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextClientDownload.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContextClientDownload.__init__-expanded"><a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> <tt id="link-74" class="py-name"><a title="tftpy.TftpStates.TftpContext" class="py-name" href="#" onclick="return doclink('link-74', 'TftpContext', 'link-37');">TftpContext</a></tt><tt class="py-op">.</tt><tt id="link-75" class="py-name"><a title="tftpy.TftpClient'.TftpClient.__init__ +tftpy.TftpPacketFactory'.TftpPacketFactory.__init__ +tftpy.TftpPacketTypes.TftpPacket.__init__ +tftpy.TftpPacketTypes.TftpPacketACK.__init__ +tftpy.TftpPacketTypes.TftpPacketDAT.__init__ +tftpy.TftpPacketTypes.TftpPacketERR.__init__ +tftpy.TftpPacketTypes.TftpPacketInitial.__init__ +tftpy.TftpPacketTypes.TftpPacketOACK.__init__ +tftpy.TftpPacketTypes.TftpPacketRRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWRQ.__init__ +tftpy.TftpPacketTypes.TftpPacketWithOptions.__init__ +tftpy.TftpServer'.TftpServer.__init__ +tftpy.TftpStates.TftpContext.__init__ +tftpy.TftpStates.TftpContextClientDownload.__init__ +tftpy.TftpStates.TftpContextClientUpload.__init__ +tftpy.TftpStates.TftpContextServer.__init__ +tftpy.TftpStates.TftpMetrics.__init__ +tftpy.TftpStates.TftpState.__init__" class="py-name" href="#" onclick="return doclink('link-75', '__init__', 'link-38');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> </tt> +<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt id="link-76" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-76', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> </tt> +<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"> <tt class="py-name">port</tt><tt class="py-op">,</tt> </tt> +<a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt class="py-name">timeout</tt><tt class="py-op">)</tt> </tt> +<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: should we refactor setting of these params?</tt> </tt> +<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt> <tt class="py-op">=</tt> <tt class="py-name">filename</tt> </tt> +<a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-77', 'options', 'link-8');">options</a></tt> <tt class="py-op">=</tt> <tt id="link-78" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-78', 'options', 'link-8');">options</a></tt> </tt> +<a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">packethook</tt> <tt class="py-op">=</tt> <tt class="py-name">packethook</tt> </tt> +<a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-comment"># FIXME - need to support alternate return formats than files?</tt> </tt> +<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># File-like objects would be ideal, ala duck-typing.</tt> </tt> +<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fileobj</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">output</tt><tt class="py-op">,</tt> <tt class="py-string">"wb"</tt><tt class="py-op">)</tt> </tt> +<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> </tt> +<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> <tt id="link-79" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-79', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"TftpContextClientDownload.__init__()"</tt><tt class="py-op">)</tt> </tt> +<a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt id="link-80" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-80', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"file_to_transfer = %s, options = %s"</tt> <tt class="py-op">%</tt> </tt> +<a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-81', 'options', 'link-8');">options</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +</div><a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> </tt> +<a name="TftpContextClientDownload.start"></a><div id="TftpContextClientDownload.start-def"><a name="L290"></a><tt class="py-lineno">290</tt> <a class="py-toggle" href="#" id="TftpContextClientDownload.start-toggle" onclick="return toggle('TftpContextClientDownload.start');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextClientDownload-class.html#start">start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextClientDownload.start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContextClientDownload.start-expanded"><a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-docstring">"""Initiate the download."""</tt> </tt> +<a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> <tt id="link-82" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-82', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Sending tftp download request to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-83', 'host', 'link-11');">host</a></tt><tt class="py-op">)</tt> </tt> +<a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> <tt id="link-84" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-84', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">" filename -> %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt><tt class="py-op">)</tt> </tt> +<a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt id="link-85" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-85', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">" options -> %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-86', 'options', 'link-8');">options</a></tt><tt class="py-op">)</tt> </tt> +<a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> </tt> +<a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">start_time</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt id="link-87" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-87', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Set metrics.start_time to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">start_time</tt><tt class="py-op">)</tt> </tt> +<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> </tt> +<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: put this in a sendRRQ method?</tt> </tt> +<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">pkt</tt> <tt class="py-op">=</tt> <tt id="link-88" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketRRQ=tftpy.TftpPacketTypes.TftpPacketRRQ-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketRRQ" class="py-name" href="#" onclick="return doclink('link-88', 'TftpPacketRRQ', 'link-88');">TftpPacketRRQ</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt> </tt> +<a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt> <tt class="py-op">=</tt> <tt class="py-string">"octet"</tt> <tt class="py-comment"># FIXME - shouldn't hardcode this</tt> </tt> +<a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-89', 'options', 'link-8');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-90', 'options', 'link-8');">options</a></tt> </tt> +<a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">.</tt><tt class="py-name">sendto</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacket.encode +tftpy.TftpPacketTypes.TftpPacketACK.encode +tftpy.TftpPacketTypes.TftpPacketDAT.encode +tftpy.TftpPacketTypes.TftpPacketERR.encode +tftpy.TftpPacketTypes.TftpPacketInitial.encode +tftpy.TftpPacketTypes.TftpPacketOACK.encode" class="py-name" href="#" onclick="return doclink('link-91', 'encode', 'link-66');">encode</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-92', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-93', 'next_block', 'link-9');">next_block</a></tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt> +<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> </tt> +<a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt> <tt class="py-op">=</tt> <tt id="link-94" class="py-name" targets="Class tftpy.TftpStates.TftpStateSentRRQ=tftpy.TftpStates.TftpStateSentRRQ-class.html"><a title="tftpy.TftpStates.TftpStateSentRRQ" class="py-name" href="#" onclick="return doclink('link-94', 'TftpStateSentRRQ', 'link-94');">TftpStateSentRRQ</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt> +<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> </tt> +<a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt><tt class="py-op">:</tt> </tt> +<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt id="link-95" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-95', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"State is %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">state</tt><tt class="py-op">)</tt> </tt> +<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="tftpy.TftpStates.TftpContext.cycle" class="py-name" href="#" onclick="return doclink('link-96', 'cycle', 'link-71');">cycle</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt> +<a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fileobj</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +</div><a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> </tt> +<a name="TftpContextClientDownload.end"></a><div id="TftpContextClientDownload.end-def"><a name="L316"></a><tt class="py-lineno">316</tt> <a class="py-toggle" href="#" id="TftpContextClientDownload.end-toggle" onclick="return toggle('TftpContextClientDownload.end');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpContextClientDownload-class.html#end">end</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpContextClientDownload.end-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpContextClientDownload.end-expanded"><a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> <tt class="py-docstring">"""Finish up the context."""</tt> </tt> +<a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">end_time</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"> <tt id="link-97" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-97', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Set metrics.end_time to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">end_time</tt><tt class="py-op">)</tt> </tt> +<a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name"><a title="tftpy.TftpStates.TftpMetrics.compute" class="py-name" href="#" onclick="return doclink('link-98', 'compute', 'link-48');">compute</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> </tt> +<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> </tt> +<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"><tt class="py-comment">###############################################################################</tt> </tt> +<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># State classes</tt> </tt> +<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">###############################################################################</tt> </tt> +<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt> +<a name="TftpState"></a><div id="TftpState-def"><a name="L327"></a><tt class="py-lineno">327</tt> <a class="py-toggle" href="#" id="TftpState-toggle" onclick="return toggle('TftpState');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpState-class.html">TftpState</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpState-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpState-expanded"><a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-docstring">"""The base class for the states."""</tt> </tt> +<a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> </tt> +<a name="TftpState.__init__"></a><div id="TftpState.__init__-def"><a name="L330"></a><tt class="py-lineno">330</tt> <a class="py-toggle" href="#" id="TftpState.__init__-toggle" onclick="return toggle('TftpState.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpState-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">context</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpState.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpState.__init__-expanded"><a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> <tt class="py-docstring">"""Constructor for setting up common instance variables. The involved</tt> </tt> +<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"><tt class="py-docstring"> file object is required, since in tftp there's always a file</tt> </tt> +<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"><tt class="py-docstring"> involved."""</tt> </tt> +<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt> <tt class="py-op">=</tt> <tt class="py-name">context</tt> </tt> +</div><a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> </tt> +<a name="TftpState.handle"></a><div id="TftpState.handle-def"><a name="L336"></a><tt class="py-lineno">336</tt> <a class="py-toggle" href="#" id="TftpState.handle-toggle" onclick="return toggle('TftpState.handle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpState-class.html#handle">handle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkt</tt><tt class="py-op">,</tt> <tt class="py-param">raddress</tt><tt class="py-op">,</tt> <tt class="py-param">rport</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpState.handle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpState.handle-expanded"><a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-docstring">"""An abstract method for handling a packet. It is expected to return</tt> </tt> +<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"><tt class="py-docstring"> a TftpState object, either itself or a new state."""</tt> </tt> +<a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">,</tt> <tt class="py-string">"Abstract method"</tt> </tt> +</div><a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> </tt> +<a name="TftpState.handleOACK"></a><div id="TftpState.handleOACK-def"><a name="L341"></a><tt class="py-lineno">341</tt> <a class="py-toggle" href="#" id="TftpState.handleOACK-toggle" onclick="return toggle('TftpState.handleOACK');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpState-class.html#handleOACK">handleOACK</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkt</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpState.handleOACK-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpState.handleOACK-expanded"><a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt class="py-docstring">"""This method handles an OACK from the server, syncing any accepted</tt> </tt> +<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"><tt class="py-docstring"> options."""</tt> </tt> +<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-99', 'options', 'link-8');">options</a></tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">></tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name" targets="Method tftpy.TftpPacketTypes.TftpPacketOACK.match_options()=tftpy.TftpPacketTypes.TftpPacketOACK-class.html#match_options"><a title="tftpy.TftpPacketTypes.TftpPacketOACK.match_options" class="py-name" href="#" onclick="return doclink('link-100', 'match_options', 'link-100');">match_options</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-101', 'options', 'link-8');">options</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt id="link-102" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-102', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Successful negotiation of options"</tt><tt class="py-op">)</tt> </tt> +<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-comment"># Set options to OACK options</tt> </tt> +<a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-103', 'options', 'link-8');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-104', 'options', 'link-8');">options</a></tt> </tt> +<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-105', 'options', 'link-8');">options</a></tt><tt class="py-op">:</tt> </tt> +<a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> <tt id="link-106" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-106', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">" %s = %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-107', 'options', 'link-8');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt id="link-108" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-108', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"Failed to negotiate options"</tt><tt class="py-op">)</tt> </tt> +<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-109" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-109', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Failed to negotiate options"</tt> </tt> +<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-110" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-110', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"No options found in OACK"</tt> </tt> +</div><a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> </tt> +<a name="TftpState.returnSupportedOptions"></a><div id="TftpState.returnSupportedOptions-def"><a name="L357"></a><tt class="py-lineno">357</tt> <a class="py-toggle" href="#" id="TftpState.returnSupportedOptions-toggle" onclick="return toggle('TftpState.returnSupportedOptions');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpState-class.html#returnSupportedOptions">returnSupportedOptions</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">options</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpState.returnSupportedOptions-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpState.returnSupportedOptions-expanded"><a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt class="py-docstring">"""This method takes a requested options list from a client, and</tt> </tt> +<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"><tt class="py-docstring"> returns the ones that are supported."""</tt> </tt> +<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> <tt class="py-comment"># We support the options blksize and tsize right now.</tt> </tt> +<a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># FIXME - put this somewhere else?</tt> </tt> +<a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">accepted_options</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt> +<a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">option</tt> <tt class="py-keyword">in</tt> <tt id="link-111" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-111', 'options', 'link-8');">options</a></tt><tt class="py-op">:</tt> </tt> +<a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">option</tt> <tt class="py-op">==</tt> <tt class="py-string">'blksize'</tt><tt class="py-op">:</tt> </tt> +<a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> <tt class="py-comment"># Make sure it's valid.</tt> </tt> +<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-112" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-112', 'options', 'link-8');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">option</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">></tt> <tt id="link-113" class="py-name"><a title="tftpy.TftpClient'.MAX_BLKSIZE +tftpy.TftpPacketFactory'.MAX_BLKSIZE +tftpy.TftpServer'.MAX_BLKSIZE +tftpy.TftpShared.MAX_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-113', 'MAX_BLKSIZE', 'link-27');">MAX_BLKSIZE</a></tt><tt class="py-op">:</tt> </tt> +<a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> <tt id="link-114" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-114', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Client requested blksize greater than %d "</tt> </tt> +<a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"> <tt class="py-string">"setting to maximum"</tt> <tt class="py-op">%</tt> <tt id="link-115" class="py-name"><a title="tftpy.TftpClient'.MAX_BLKSIZE +tftpy.TftpPacketFactory'.MAX_BLKSIZE +tftpy.TftpServer'.MAX_BLKSIZE +tftpy.TftpShared.MAX_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-115', 'MAX_BLKSIZE', 'link-27');">MAX_BLKSIZE</a></tt><tt class="py-op">)</tt> </tt> +<a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> <tt class="py-name">accepted_options</tt><tt class="py-op">[</tt><tt class="py-name">option</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-116" class="py-name"><a title="tftpy.TftpClient'.MAX_BLKSIZE +tftpy.TftpPacketFactory'.MAX_BLKSIZE +tftpy.TftpServer'.MAX_BLKSIZE +tftpy.TftpShared.MAX_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-116', 'MAX_BLKSIZE', 'link-27');">MAX_BLKSIZE</a></tt> </tt> +<a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-117" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-117', 'options', 'link-8');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">option</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op"><</tt> <tt id="link-118" class="py-name" targets="Variable tftpy.TftpClient'.MIN_BLKSIZE=tftpy.TftpClient%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpPacketFactory'.MIN_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpServer'.MIN_BLKSIZE=tftpy.TftpServer%27-module.html#MIN_BLKSIZE,Variable tftpy.TftpShared.MIN_BLKSIZE=tftpy.TftpShared-module.html#MIN_BLKSIZE"><a title="tftpy.TftpClient'.MIN_BLKSIZE +tftpy.TftpPacketFactory'.MIN_BLKSIZE +tftpy.TftpServer'.MIN_BLKSIZE +tftpy.TftpShared.MIN_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-118', 'MIN_BLKSIZE', 'link-118');">MIN_BLKSIZE</a></tt><tt class="py-op">:</tt> </tt> +<a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> <tt id="link-119" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-119', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Client requested blksize less than %d "</tt> </tt> +<a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> <tt class="py-string">"setting to minimum"</tt> <tt class="py-op">%</tt> <tt id="link-120" class="py-name"><a title="tftpy.TftpClient'.MIN_BLKSIZE +tftpy.TftpPacketFactory'.MIN_BLKSIZE +tftpy.TftpServer'.MIN_BLKSIZE +tftpy.TftpShared.MIN_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-120', 'MIN_BLKSIZE', 'link-118');">MIN_BLKSIZE</a></tt><tt class="py-op">)</tt> </tt> +<a name="L373"></a><tt class="py-lineno">373</tt> <tt class="py-line"> <tt class="py-name">accepted_options</tt><tt class="py-op">[</tt><tt class="py-name">option</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-121" class="py-name"><a title="tftpy.TftpClient'.MIN_BLKSIZE +tftpy.TftpPacketFactory'.MIN_BLKSIZE +tftpy.TftpServer'.MIN_BLKSIZE +tftpy.TftpShared.MIN_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-121', 'MIN_BLKSIZE', 'link-118');">MIN_BLKSIZE</a></tt> </tt> +<a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"> <tt class="py-name">accepted_options</tt><tt class="py-op">[</tt><tt class="py-name">option</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-122" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-122', 'options', 'link-8');">options</a></tt><tt class="py-op">[</tt><tt class="py-name">option</tt><tt class="py-op">]</tt> </tt> +<a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">option</tt> <tt class="py-op">==</tt> <tt class="py-string">'tsize'</tt><tt class="py-op">:</tt> </tt> +<a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"> <tt id="link-123" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-123', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"tsize option is set"</tt><tt class="py-op">)</tt> </tt> +<a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"> <tt class="py-name">accepted_options</tt><tt class="py-op">[</tt><tt class="py-string">'tsize'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt> +<a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L380"></a><tt class="py-lineno">380</tt> <tt class="py-line"> <tt id="link-124" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-124', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Dropping unsupported option '%s'"</tt> <tt class="py-op">%</tt> <tt class="py-name">option</tt><tt class="py-op">)</tt> </tt> +<a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> <tt id="link-125" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-125', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Returning these accepted options: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">accepted_options</tt><tt class="py-op">)</tt> </tt> +<a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">accepted_options</tt> </tt> +</div><a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"> </tt> +<a name="TftpState.serverInitial"></a><div id="TftpState.serverInitial-def"><a name="L384"></a><tt class="py-lineno">384</tt> <a class="py-toggle" href="#" id="TftpState.serverInitial-toggle" onclick="return toggle('TftpState.serverInitial');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpState-class.html#serverInitial">serverInitial</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkt</tt><tt class="py-op">,</tt> <tt class="py-param">raddress</tt><tt class="py-op">,</tt> <tt class="py-param">rport</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpState.serverInitial-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpState.serverInitial-expanded"><a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"> <tt class="py-docstring">"""This method performs initial setup for a server context transfer,</tt> </tt> +<a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"><tt class="py-docstring"> put here to refactor code out of the TftpStateServerRecvRRQ and</tt> </tt> +<a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"><tt class="py-docstring"> TftpStateServerRecvWRQ classes, since their initial setup is</tt> </tt> +<a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"><tt class="py-docstring"> identical. The method returns a boolean, sendoack, to indicate whether</tt> </tt> +<a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"><tt class="py-docstring"> it is required to send an OACK to the client."""</tt> </tt> +<a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt id="link-126" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-126', 'options', 'link-8');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt id="link-127" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-127', 'options', 'link-8');">options</a></tt> </tt> +<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt class="py-name">sendoack</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt> +<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-128" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-128', 'options', 'link-8');">options</a></tt><tt class="py-op">:</tt> </tt> +<a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> <tt id="link-129" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-129', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Setting default options, blksize"</tt><tt class="py-op">)</tt> </tt> +<a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: put default options elsewhere</tt> </tt> +<a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-130', 'options', 'link-8');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> <tt class="py-string">'blksize'</tt><tt class="py-op">:</tt> <tt id="link-131" class="py-name" targets="Variable tftpy.TftpClient'.DEF_BLKSIZE=tftpy.TftpClient%27-module.html#DEF_BLKSIZE,Variable tftpy.TftpPacketFactory'.DEF_BLKSIZE=tftpy.TftpPacketFactory%27-module.html#DEF_BLKSIZE,Variable tftpy.TftpServer'.DEF_BLKSIZE=tftpy.TftpServer%27-module.html#DEF_BLKSIZE,Variable tftpy.TftpShared.DEF_BLKSIZE=tftpy.TftpShared-module.html#DEF_BLKSIZE"><a title="tftpy.TftpClient'.DEF_BLKSIZE +tftpy.TftpPacketFactory'.DEF_BLKSIZE +tftpy.TftpServer'.DEF_BLKSIZE +tftpy.TftpShared.DEF_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-131', 'DEF_BLKSIZE', 'link-131');">DEF_BLKSIZE</a></tt> <tt class="py-op">}</tt> </tt> +<a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"> <tt id="link-132" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-132', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Options requested: %s"</tt> <tt class="py-op">%</tt> <tt id="link-133" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-133', 'options', 'link-8');">options</a></tt><tt class="py-op">)</tt> </tt> +<a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-134', 'options', 'link-8');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name" targets="Method tftpy.TftpStates.TftpState.returnSupportedOptions()=tftpy.TftpStates.TftpState-class.html#returnSupportedOptions"><a title="tftpy.TftpStates.TftpState.returnSupportedOptions" class="py-name" href="#" onclick="return doclink('link-135', 'returnSupportedOptions', 'link-135');">returnSupportedOptions</a></tt><tt class="py-op">(</tt><tt id="link-136" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-136', 'options', 'link-8');">options</a></tt><tt class="py-op">)</tt> </tt> +<a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"> <tt class="py-name">sendoack</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt> +<a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"> </tt> +<a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> <tt class="py-comment"># FIXME - only octet mode is supported at this time.</tt> </tt> +<a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">mode</tt> <tt class="py-op">!=</tt> <tt class="py-string">'octet'</tt><tt class="py-op">:</tt> </tt> +<a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name" targets="Method tftpy.TftpStates.TftpState.sendError()=tftpy.TftpStates.TftpState-class.html#sendError"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-137', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-138" class="py-name" targets="Class tftpy.TftpShared.TftpErrors=tftpy.TftpShared.TftpErrors-class.html"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-138', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-139" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.IllegalTftpOp=tftpy.TftpShared.TftpErrors-class.html#IllegalTftpOp"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-139', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-140" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-140', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> \ </tt> +<a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"> <tt class="py-string">"Only octet transfers are supported at this time."</tt> </tt> +<a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> </tt> +<a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> <tt class="py-comment"># test host/port of client end</tt> </tt> +<a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-141', 'host', 'link-11');">host</a></tt> <tt class="py-op">!=</tt> <tt class="py-name">raddress</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">port</tt> <tt class="py-op">!=</tt> <tt class="py-name">rport</tt><tt class="py-op">:</tt> </tt> +<a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-142', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-143" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-143', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-144" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.UnknownTID=tftpy.TftpShared.TftpErrors-class.html#UnknownTID"><a title="tftpy.TftpShared.TftpErrors.UnknownTID" class="py-name" href="#" onclick="return doclink('link-144', 'UnknownTID', 'link-144');">UnknownTID</a></tt><tt class="py-op">)</tt> </tt> +<a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> <tt id="link-145" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-145', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"Expected traffic from %s:%s but received it "</tt> </tt> +<a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-string">"from %s:%s instead."</tt> </tt> +<a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-146', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> </tt> +<a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">,</tt> </tt> +<a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> <tt class="py-name">raddress</tt><tt class="py-op">,</tt> </tt> +<a name="L415"></a><tt class="py-lineno">415</tt> <tt class="py-line"> <tt class="py-name">rport</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: increment an error count?</tt> </tt> +<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># Return same state, we're still waiting for valid traffic.</tt> </tt> +<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +<a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"> </tt> +<a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"> <tt id="link-147" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-147', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Requested filename is %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt> </tt> +<a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-comment"># There are no os.sep's allowed in the filename.</tt> </tt> +<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># FIXME: Should we allow subdirectories?</tt> </tt> +<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">sep</tt><tt class="py-op">)</tt> <tt class="py-op">>=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-148', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-149" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-149', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-150" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-150', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-151" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-151', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"%s found in filename, not permitted"</tt> <tt class="py-op">%</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">sep</tt> </tt> +<a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> </tt> +<a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt> <tt class="py-op">=</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">filename</tt> </tt> +<a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> </tt> +<a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">sendoack</tt> </tt> +</div><a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> </tt> +<a name="TftpState.sendDAT"></a><div id="TftpState.sendDAT-def"><a name="L431"></a><tt class="py-lineno">431</tt> <a class="py-toggle" href="#" id="TftpState.sendDAT-toggle" onclick="return toggle('TftpState.sendDAT');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpState-class.html#sendDAT">sendDAT</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resend</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpState.sendDAT-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpState.sendDAT-expanded"><a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"> <tt class="py-docstring">"""This method sends the next DAT packet based on the data in the</tt> </tt> +<a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"><tt class="py-docstring"> context. It returns a boolean indicating whether the transfer is</tt> </tt> +<a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"><tt class="py-docstring"> finished."""</tt> </tt> +<a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"> <tt class="py-name">finished</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt> +<a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"> <tt class="py-name">blocknumber</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-152', 'next_block', 'link-9');">next_block</a></tt> </tt> +<a name="L437"></a><tt class="py-lineno">437</tt> <tt class="py-line"> <tt id="link-153" class="py-name"><a title="tftpy.TftpShared.tftpassert" class="py-name" href="#" onclick="return doclink('link-153', 'tftpassert', 'link-6');">tftpassert</a></tt><tt class="py-op">(</tt> <tt class="py-name">blocknumber</tt> <tt class="py-op">></tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-string">"There is no block zero!"</tt> <tt class="py-op">)</tt> </tt> +<a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"> <tt class="py-name">dat</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt> +<a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">resend</tt><tt class="py-op">:</tt> </tt> +<a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"> <tt id="link-154" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-154', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Resending block number %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"> <tt class="py-name">dat</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">last_dat_pkt</tt> </tt> +<a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">resent_bytes</tt> <tt class="py-op">+=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">dat</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt> +<a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name" targets="Method tftpy.TftpStates.TftpMetrics.add_dup()=tftpy.TftpStates.TftpMetrics-class.html#add_dup"><a title="tftpy.TftpStates.TftpMetrics.add_dup" class="py-name" href="#" onclick="return doclink('link-155', 'add_dup', 'link-155');">add_dup</a></tt><tt class="py-op">(</tt><tt class="py-name">dat</tt><tt class="py-op">)</tt> </tt> +<a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L445"></a><tt class="py-lineno">445</tt> <tt class="py-line"> <tt class="py-name">blksize</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-156" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-156', 'options', 'link-8');">options</a></tt><tt class="py-op">[</tt><tt class="py-string">'blksize'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt> +<a name="L446"></a><tt class="py-lineno">446</tt> <tt class="py-line"> <tt class="py-name">buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">fileobj</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-name">blksize</tt><tt class="py-op">)</tt> </tt> +<a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"> <tt id="link-157" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-157', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Read %d bytes into buffer"</tt> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">buffer</tt><tt class="py-op">)</tt> <tt class="py-op"><</tt> <tt class="py-name">blksize</tt><tt class="py-op">:</tt> </tt> +<a name="L449"></a><tt class="py-lineno">449</tt> <tt class="py-line"> <tt id="link-158" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-158', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Reached EOF on file %s"</tt> </tt> +<a name="L450"></a><tt class="py-lineno">450</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt><tt class="py-op">)</tt> </tt> +<a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"> <tt class="py-name">finished</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt> +<a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"> <tt class="py-name">dat</tt> <tt class="py-op">=</tt> <tt id="link-159" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketDAT=tftpy.TftpPacketTypes.TftpPacketDAT-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketDAT" class="py-name" href="#" onclick="return doclink('link-159', 'TftpPacketDAT', 'link-159');">TftpPacketDAT</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"> <tt class="py-name">dat</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">buffer</tt> </tt> +<a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"> <tt class="py-name">dat</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> <tt class="py-op">=</tt> <tt class="py-name">blocknumber</tt> </tt> +<a name="L455"></a><tt class="py-lineno">455</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">bytes</tt> <tt class="py-op">+=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">dat</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt> +<a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"> <tt id="link-160" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-160', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Sending DAT packet %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">dat</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">.</tt><tt class="py-name">sendto</tt><tt class="py-op">(</tt><tt class="py-name">dat</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacket.encode +tftpy.TftpPacketTypes.TftpPacketACK.encode +tftpy.TftpPacketTypes.TftpPacketDAT.encode +tftpy.TftpPacketTypes.TftpPacketERR.encode +tftpy.TftpPacketTypes.TftpPacketInitial.encode +tftpy.TftpPacketTypes.TftpPacketOACK.encode" class="py-name" href="#" onclick="return doclink('link-161', 'encode', 'link-66');">encode</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">,</tt> </tt> +<a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-162', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">port</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">packethook</tt><tt class="py-op">:</tt> </tt> +<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">packethook</tt><tt class="py-op">(</tt><tt class="py-name">dat</tt><tt class="py-op">)</tt> </tt> +<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">last_dat_pkt</tt> <tt class="py-op">=</tt> <tt class="py-name">dat</tt> </tt> +<a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">finished</tt> </tt> +</div><a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> </tt> +<a name="TftpState.sendACK"></a><div id="TftpState.sendACK-def"><a name="L464"></a><tt class="py-lineno">464</tt> <a class="py-toggle" href="#" id="TftpState.sendACK-toggle" onclick="return toggle('TftpState.sendACK');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpState-class.html#sendACK">sendACK</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">blocknumber</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpState.sendACK-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpState.sendACK-expanded"><a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> <tt class="py-docstring">"""This method sends an ack packet to the block number specified. If</tt> </tt> +<a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"><tt class="py-docstring"> none is specified, it defaults to the next_block property in the</tt> </tt> +<a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"><tt class="py-docstring"> parent context."""</tt> </tt> +<a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"> <tt id="link-163" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-163', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"In sendACK, blocknumber is %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L469"></a><tt class="py-lineno">469</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">blocknumber</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt> +<a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"> <tt class="py-name">blocknumber</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-164" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-164', 'next_block', 'link-9');">next_block</a></tt> </tt> +<a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"> <tt id="link-165" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-165', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Sending ack to block %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"> <tt class="py-name">ackpkt</tt> <tt class="py-op">=</tt> <tt id="link-166" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketACK=tftpy.TftpPacketTypes.TftpPacketACK-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketACK" class="py-name" href="#" onclick="return doclink('link-166', 'TftpPacketACK', 'link-166');">TftpPacketACK</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"> <tt class="py-name">ackpkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> <tt class="py-op">=</tt> <tt class="py-name">blocknumber</tt> </tt> +<a name="L474"></a><tt class="py-lineno">474</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">.</tt><tt class="py-name">sendto</tt><tt class="py-op">(</tt><tt class="py-name">ackpkt</tt><tt class="py-op">.</tt><tt id="link-167" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacket.encode +tftpy.TftpPacketTypes.TftpPacketACK.encode +tftpy.TftpPacketTypes.TftpPacketDAT.encode +tftpy.TftpPacketTypes.TftpPacketERR.encode +tftpy.TftpPacketTypes.TftpPacketInitial.encode +tftpy.TftpPacketTypes.TftpPacketOACK.encode" class="py-name" href="#" onclick="return doclink('link-167', 'encode', 'link-66');">encode</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">,</tt> </tt> +<a name="L475"></a><tt class="py-lineno">475</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-168" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-168', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> </tt> +<a name="L476"></a><tt class="py-lineno">476</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +</div><a name="L477"></a><tt class="py-lineno">477</tt> <tt class="py-line"> </tt> +<a name="TftpState.sendError"></a><div id="TftpState.sendError-def"><a name="L478"></a><tt class="py-lineno">478</tt> <a class="py-toggle" href="#" id="TftpState.sendError-toggle" onclick="return toggle('TftpState.sendError');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpState-class.html#sendError">sendError</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">errorcode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpState.sendError-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpState.sendError-expanded"><a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> <tt class="py-docstring">"""This method uses the socket passed, and uses the errorcode to</tt> </tt> +<a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"><tt class="py-docstring"> compose and send an error packet."""</tt> </tt> +<a name="L481"></a><tt class="py-lineno">481</tt> <tt class="py-line"> <tt id="link-169" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-169', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"In sendError, being asked to send error %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">errorcode</tt><tt class="py-op">)</tt> </tt> +<a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"> <tt class="py-name">errpkt</tt> <tt class="py-op">=</tt> <tt id="link-170" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketERR=tftpy.TftpPacketTypes.TftpPacketERR-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketERR" class="py-name" href="#" onclick="return doclink('link-170', 'TftpPacketERR', 'link-170');">TftpPacketERR</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L483"></a><tt class="py-lineno">483</tt> <tt class="py-line"> <tt class="py-name">errpkt</tt><tt class="py-op">.</tt><tt class="py-name">errorcode</tt> <tt class="py-op">=</tt> <tt class="py-name">errorcode</tt> </tt> +<a name="L484"></a><tt class="py-lineno">484</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">.</tt><tt class="py-name">sendto</tt><tt class="py-op">(</tt><tt class="py-name">errpkt</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacket.encode +tftpy.TftpPacketTypes.TftpPacketACK.encode +tftpy.TftpPacketTypes.TftpPacketDAT.encode +tftpy.TftpPacketTypes.TftpPacketERR.encode +tftpy.TftpPacketTypes.TftpPacketInitial.encode +tftpy.TftpPacketTypes.TftpPacketOACK.encode" class="py-name" href="#" onclick="return doclink('link-171', 'encode', 'link-66');">encode</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">,</tt> </tt> +<a name="L485"></a><tt class="py-lineno">485</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-172" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-172', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> </tt> +<a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +</div><a name="L487"></a><tt class="py-lineno">487</tt> <tt class="py-line"> </tt> +<a name="TftpState.sendOACK"></a><div id="TftpState.sendOACK-def"><a name="L488"></a><tt class="py-lineno">488</tt> <a class="py-toggle" href="#" id="TftpState.sendOACK-toggle" onclick="return toggle('TftpState.sendOACK');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpState-class.html#sendOACK">sendOACK</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpState.sendOACK-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpState.sendOACK-expanded"><a name="L489"></a><tt class="py-lineno">489</tt> <tt class="py-line"> <tt class="py-docstring">"""This method sends an OACK packet with the options from the current</tt> </tt> +<a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"><tt class="py-docstring"> context."""</tt> </tt> +<a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"> <tt id="link-173" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-173', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"In sendOACK with options %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-174" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-174', 'options', 'link-8');">options</a></tt><tt class="py-op">)</tt> </tt> +<a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"> <tt class="py-name">pkt</tt> <tt class="py-op">=</tt> <tt id="link-175" class="py-name" targets="Class tftpy.TftpPacketTypes.TftpPacketOACK=tftpy.TftpPacketTypes.TftpPacketOACK-class.html"><a title="tftpy.TftpPacketTypes.TftpPacketOACK" class="py-name" href="#" onclick="return doclink('link-175', 'TftpPacketOACK', 'link-175');">TftpPacketOACK</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt id="link-176" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-176', 'options', 'link-8');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-177" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-177', 'options', 'link-8');">options</a></tt> </tt> +<a name="L494"></a><tt class="py-lineno">494</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">sock</tt><tt class="py-op">.</tt><tt class="py-name">sendto</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt id="link-178" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacket.encode +tftpy.TftpPacketTypes.TftpPacketACK.encode +tftpy.TftpPacketTypes.TftpPacketDAT.encode +tftpy.TftpPacketTypes.TftpPacketERR.encode +tftpy.TftpPacketTypes.TftpPacketInitial.encode +tftpy.TftpPacketTypes.TftpPacketOACK.encode" class="py-name" href="#" onclick="return doclink('link-178', 'encode', 'link-66');">encode</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">buffer</tt><tt class="py-op">,</tt> </tt> +<a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-179" class="py-name"><a title="tftpy.TftpStates.TftpContext.host" class="py-name" href="#" onclick="return doclink('link-179', 'host', 'link-11');">host</a></tt><tt class="py-op">,</tt> </tt> +<a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +</div><a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"> </tt> +<a name="TftpState.handleDat"></a><div id="TftpState.handleDat-def"><a name="L498"></a><tt class="py-lineno">498</tt> <a class="py-toggle" href="#" id="TftpState.handleDat-toggle" onclick="return toggle('TftpState.handleDat');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpState-class.html#handleDat">handleDat</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkt</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpState.handleDat-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpState.handleDat-expanded"><a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> <tt class="py-docstring">"""This method handles a DAT packet during a client download, or a</tt> </tt> +<a name="L500"></a><tt class="py-lineno">500</tt> <tt class="py-line"><tt class="py-docstring"> server upload."""</tt> </tt> +<a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> <tt id="link-180" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-180', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Handling DAT packet - block %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"> <tt id="link-181" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-181', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Expecting block %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-182" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-182', 'next_block', 'link-9');">next_block</a></tt><tt class="py-op">)</tt> </tt> +<a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-183" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-183', 'next_block', 'link-9');">next_block</a></tt><tt class="py-op">:</tt> </tt> +<a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> <tt id="link-184" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-184', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Good, received block %d in sequence"</tt> </tt> +<a name="L505"></a><tt class="py-lineno">505</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"> </tt> +<a name="L507"></a><tt class="py-lineno">507</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-185" class="py-name" targets="Method tftpy.TftpStates.TftpState.sendACK()=tftpy.TftpStates.TftpState-class.html#sendACK"><a title="tftpy.TftpStates.TftpState.sendACK" class="py-name" href="#" onclick="return doclink('link-185', 'sendACK', 'link-185');">sendACK</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-186" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-186', 'next_block', 'link-9');">next_block</a></tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt> +<a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"> </tt> +<a name="L510"></a><tt class="py-lineno">510</tt> <tt class="py-line"> <tt id="link-187" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-187', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Writing %d bytes to output file"</tt> </tt> +<a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">fileobj</tt><tt class="py-op">.</tt><tt class="py-name">write</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt> +<a name="L513"></a><tt class="py-lineno">513</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">bytes</tt> <tt class="py-op">+=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt> +<a name="L514"></a><tt class="py-lineno">514</tt> <tt class="py-line"> <tt class="py-comment"># Check for end-of-file, any less than full data packet.</tt> </tt> +<a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> <tt class="py-op"><</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-188" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-188', 'options', 'link-8');">options</a></tt><tt class="py-op">[</tt><tt class="py-string">'blksize'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"> <tt id="link-189" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-189', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"End of file detected"</tt><tt class="py-op">)</tt> </tt> +<a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt> +<a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"> </tt> +<a name="L519"></a><tt class="py-lineno">519</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> <tt class="py-op"><</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-190" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-190', 'next_block', 'link-9');">next_block</a></tt><tt class="py-op">:</tt> </tt> +<a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L521"></a><tt class="py-lineno">521</tt> <tt class="py-line"> <tt id="link-191" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-191', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"There is no block zero!"</tt><tt class="py-op">)</tt> </tt> +<a name="L522"></a><tt class="py-lineno">522</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-192" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-192', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-193" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-193', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-194" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-194', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L523"></a><tt class="py-lineno">523</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-195" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-195', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"There is no block zero!"</tt> </tt> +<a name="L524"></a><tt class="py-lineno">524</tt> <tt class="py-line"> <tt id="link-196" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-196', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Dropping duplicate block %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L525"></a><tt class="py-lineno">525</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt id="link-197" class="py-name"><a title="tftpy.TftpStates.TftpMetrics.add_dup" class="py-name" href="#" onclick="return doclink('link-197', 'add_dup', 'link-155');">add_dup</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L526"></a><tt class="py-lineno">526</tt> <tt class="py-line"> <tt id="link-198" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-198', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"ACKing block %d again, just in case"</tt> <tt class="py-op">%</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L527"></a><tt class="py-lineno">527</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="tftpy.TftpStates.TftpState.sendACK" class="py-name" href="#" onclick="return doclink('link-199', 'sendACK', 'link-185');">sendACK</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L528"></a><tt class="py-lineno">528</tt> <tt class="py-line"> </tt> +<a name="L529"></a><tt class="py-lineno">529</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L530"></a><tt class="py-lineno">530</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: should we be more tolerant and just discard instead?</tt> </tt> +<a name="L531"></a><tt class="py-lineno">531</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-string">"Whoa! Received future block %d but expected %d"</tt> \ </tt> +<a name="L532"></a><tt class="py-lineno">532</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-200" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-200', 'next_block', 'link-9');">next_block</a></tt><tt class="py-op">)</tt> </tt> +<a name="L533"></a><tt class="py-lineno">533</tt> <tt class="py-line"> <tt id="link-201" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-201', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt> +<a name="L534"></a><tt class="py-lineno">534</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-202" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-202', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-name">msg</tt> </tt> +<a name="L535"></a><tt class="py-lineno">535</tt> <tt class="py-line"> </tt> +<a name="L536"></a><tt class="py-lineno">536</tt> <tt class="py-line"> <tt class="py-comment"># Default is to ack</tt> </tt> +<a name="L537"></a><tt class="py-lineno">537</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt id="link-203" class="py-name" targets="Class tftpy.TftpStates.TftpStateExpectDAT=tftpy.TftpStates.TftpStateExpectDAT-class.html"><a title="tftpy.TftpStates.TftpStateExpectDAT" class="py-name" href="#" onclick="return doclink('link-203', 'TftpStateExpectDAT', 'link-203');">TftpStateExpectDAT</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L538"></a><tt class="py-lineno">538</tt> <tt class="py-line"> </tt> +<a name="TftpStateServerRecvRRQ"></a><div id="TftpStateServerRecvRRQ-def"><a name="L539"></a><tt class="py-lineno">539</tt> <a class="py-toggle" href="#" id="TftpStateServerRecvRRQ-toggle" onclick="return toggle('TftpStateServerRecvRRQ');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html">TftpStateServerRecvRRQ</a><tt class="py-op">(</tt><tt class="py-base-class">TftpState</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateServerRecvRRQ-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpStateServerRecvRRQ-expanded"><a name="L540"></a><tt class="py-lineno">540</tt> <tt class="py-line"> <tt class="py-docstring">"""This class represents the state of the TFTP server when it has just</tt> </tt> +<a name="L541"></a><tt class="py-lineno">541</tt> <tt class="py-line"><tt class="py-docstring"> received an RRQ packet."""</tt> </tt> +<a name="TftpStateServerRecvRRQ.handle"></a><div id="TftpStateServerRecvRRQ.handle-def"><a name="L542"></a><tt class="py-lineno">542</tt> <a class="py-toggle" href="#" id="TftpStateServerRecvRRQ.handle-toggle" onclick="return toggle('TftpStateServerRecvRRQ.handle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html#handle">handle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkt</tt><tt class="py-op">,</tt> <tt class="py-param">raddress</tt><tt class="py-op">,</tt> <tt class="py-param">rport</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateServerRecvRRQ.handle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpStateServerRecvRRQ.handle-expanded"><a name="L543"></a><tt class="py-lineno">543</tt> <tt class="py-line"> <tt class="py-docstring">"Handle an initial RRQ packet as a server."</tt> </tt> +<a name="L544"></a><tt class="py-lineno">544</tt> <tt class="py-line"> <tt id="link-204" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-204', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"In TftpStateServerRecvRRQ.handle"</tt><tt class="py-op">)</tt> </tt> +<a name="L545"></a><tt class="py-lineno">545</tt> <tt class="py-line"> <tt class="py-name">sendoack</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-205" class="py-name" targets="Method tftpy.TftpStates.TftpState.serverInitial()=tftpy.TftpStates.TftpState-class.html#serverInitial"><a title="tftpy.TftpStates.TftpState.serverInitial" class="py-name" href="#" onclick="return doclink('link-205', 'serverInitial', 'link-205');">serverInitial</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt class="py-name">raddress</tt><tt class="py-op">,</tt> <tt class="py-name">rport</tt><tt class="py-op">)</tt> </tt> +<a name="L546"></a><tt class="py-lineno">546</tt> <tt class="py-line"> <tt class="py-name">path</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">+</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">sep</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt> </tt> +<a name="L547"></a><tt class="py-lineno">547</tt> <tt class="py-line"> <tt id="link-206" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-206', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Opening file %s for reading"</tt> <tt class="py-op">%</tt> <tt class="py-name">path</tt><tt class="py-op">)</tt> </tt> +<a name="L548"></a><tt class="py-lineno">548</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">exists</tt><tt class="py-op">(</tt><tt class="py-name">path</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L549"></a><tt class="py-lineno">549</tt> <tt class="py-line"> <tt class="py-comment"># Note: Open in binary mode for win32 portability, since win32</tt> </tt> +<a name="L550"></a><tt class="py-lineno">550</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># blows.</tt> </tt> +<a name="L551"></a><tt class="py-lineno">551</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">fileobj</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">path</tt><tt class="py-op">,</tt> <tt class="py-string">"rb"</tt><tt class="py-op">)</tt> </tt> +<a name="L552"></a><tt class="py-lineno">552</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dyn_file_func</tt><tt class="py-op">:</tt> </tt> +<a name="L553"></a><tt class="py-lineno">553</tt> <tt class="py-line"> <tt id="link-207" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-207', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"No such file %s but using dyn_file_func"</tt> <tt class="py-op">%</tt> <tt class="py-name">path</tt><tt class="py-op">)</tt> </tt> +<a name="L554"></a><tt class="py-lineno">554</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">fileobj</tt> <tt class="py-op">=</tt> \ </tt> +<a name="L555"></a><tt class="py-lineno">555</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dyn_file_func</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt><tt class="py-op">)</tt> </tt> +<a name="L556"></a><tt class="py-lineno">556</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L557"></a><tt class="py-lineno">557</tt> <tt class="py-line"> <tt class="py-name">send</tt><tt class="py-op">.</tt><tt id="link-208" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-208', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-209" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-209', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-210" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.FileNotFound=tftpy.TftpShared.TftpErrors-class.html#FileNotFound"><a title="tftpy.TftpShared.TftpErrors.FileNotFound" class="py-name" href="#" onclick="return doclink('link-210', 'FileNotFound', 'link-210');">FileNotFound</a></tt><tt class="py-op">)</tt> </tt> +<a name="L558"></a><tt class="py-lineno">558</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-211" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-211', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"File not found: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">path</tt> </tt> +<a name="L559"></a><tt class="py-lineno">559</tt> <tt class="py-line"> </tt> +<a name="L560"></a><tt class="py-lineno">560</tt> <tt class="py-line"> <tt class="py-comment"># Options negotiation.</tt> </tt> +<a name="L561"></a><tt class="py-lineno">561</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">sendoack</tt><tt class="py-op">:</tt> </tt> +<a name="L562"></a><tt class="py-lineno">562</tt> <tt class="py-line"> <tt class="py-comment"># Note, next_block is 0 here since that's the proper</tt> </tt> +<a name="L563"></a><tt class="py-lineno">563</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># acknowledgement to an OACK.</tt> </tt> +<a name="L564"></a><tt class="py-lineno">564</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># FIXME: perhaps we do need a TftpStateExpectOACK class...</tt> </tt> +<a name="L565"></a><tt class="py-lineno">565</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-212" class="py-name" targets="Method tftpy.TftpStates.TftpState.sendOACK()=tftpy.TftpStates.TftpState-class.html#sendOACK"><a title="tftpy.TftpStates.TftpState.sendOACK" class="py-name" href="#" onclick="return doclink('link-212', 'sendOACK', 'link-212');">sendOACK</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L566"></a><tt class="py-lineno">566</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L567"></a><tt class="py-lineno">567</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-213" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-213', 'next_block', 'link-9');">next_block</a></tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt> +<a name="L568"></a><tt class="py-lineno">568</tt> <tt class="py-line"> <tt id="link-214" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-214', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"No requested options, starting send..."</tt><tt class="py-op">)</tt> </tt> +<a name="L569"></a><tt class="py-lineno">569</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">pending_complete</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-215" class="py-name" targets="Method tftpy.TftpStates.TftpState.sendDAT()=tftpy.TftpStates.TftpState-class.html#sendDAT"><a title="tftpy.TftpStates.TftpState.sendDAT" class="py-name" href="#" onclick="return doclink('link-215', 'sendDAT', 'link-215');">sendDAT</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L570"></a><tt class="py-lineno">570</tt> <tt class="py-line"> <tt class="py-comment"># Note, we expect an ack regardless of whether we sent a DAT or an</tt> </tt> +<a name="L571"></a><tt class="py-lineno">571</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># OACK.</tt> </tt> +<a name="L572"></a><tt class="py-lineno">572</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt id="link-216" class="py-name" targets="Class tftpy.TftpStates.TftpStateExpectACK=tftpy.TftpStates.TftpStateExpectACK-class.html"><a title="tftpy.TftpStates.TftpStateExpectACK" class="py-name" href="#" onclick="return doclink('link-216', 'TftpStateExpectACK', 'link-216');">TftpStateExpectACK</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L573"></a><tt class="py-lineno">573</tt> <tt class="py-line"> </tt> +<a name="L574"></a><tt class="py-lineno">574</tt> <tt class="py-line"> <tt class="py-comment"># Note, we don't have to check any other states in this method, that's</tt> </tt> +<a name="L575"></a><tt class="py-lineno">575</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># up to the caller.</tt> </tt> +<a name="L576"></a><tt class="py-lineno">576</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt> +<a name="TftpStateServerRecvWRQ"></a><div id="TftpStateServerRecvWRQ-def"><a name="L577"></a><tt class="py-lineno">577</tt> <a class="py-toggle" href="#" id="TftpStateServerRecvWRQ-toggle" onclick="return toggle('TftpStateServerRecvWRQ');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html">TftpStateServerRecvWRQ</a><tt class="py-op">(</tt><tt class="py-base-class">TftpState</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateServerRecvWRQ-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpStateServerRecvWRQ-expanded"><a name="L578"></a><tt class="py-lineno">578</tt> <tt class="py-line"> <tt class="py-docstring">"""This class represents the state of the TFTP server when it has just</tt> </tt> +<a name="L579"></a><tt class="py-lineno">579</tt> <tt class="py-line"><tt class="py-docstring"> received a WRQ packet."""</tt> </tt> +<a name="TftpStateServerRecvWRQ.handle"></a><div id="TftpStateServerRecvWRQ.handle-def"><a name="L580"></a><tt class="py-lineno">580</tt> <a class="py-toggle" href="#" id="TftpStateServerRecvWRQ.handle-toggle" onclick="return toggle('TftpStateServerRecvWRQ.handle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html#handle">handle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkt</tt><tt class="py-op">,</tt> <tt class="py-param">raddress</tt><tt class="py-op">,</tt> <tt class="py-param">rport</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateServerRecvWRQ.handle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpStateServerRecvWRQ.handle-expanded"><a name="L581"></a><tt class="py-lineno">581</tt> <tt class="py-line"> <tt class="py-docstring">"Handle an initial WRQ packet as a server."</tt> </tt> +<a name="L582"></a><tt class="py-lineno">582</tt> <tt class="py-line"> <tt id="link-217" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-217', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"In TftpStateServerRecvWRQ.handle"</tt><tt class="py-op">)</tt> </tt> +<a name="L583"></a><tt class="py-lineno">583</tt> <tt class="py-line"> <tt class="py-name">sendoack</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-218" class="py-name"><a title="tftpy.TftpStates.TftpState.serverInitial" class="py-name" href="#" onclick="return doclink('link-218', 'serverInitial', 'link-205');">serverInitial</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt class="py-name">raddress</tt><tt class="py-op">,</tt> <tt class="py-name">rport</tt><tt class="py-op">)</tt> </tt> +<a name="L584"></a><tt class="py-lineno">584</tt> <tt class="py-line"> <tt class="py-name">path</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">root</tt> <tt class="py-op">+</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">sep</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">file_to_transfer</tt> </tt> +<a name="L585"></a><tt class="py-lineno">585</tt> <tt class="py-line"> <tt id="link-219" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-219', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Opening file %s for writing"</tt> <tt class="py-op">%</tt> <tt class="py-name">path</tt><tt class="py-op">)</tt> </tt> +<a name="L586"></a><tt class="py-lineno">586</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">exists</tt><tt class="py-op">(</tt><tt class="py-name">path</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L587"></a><tt class="py-lineno">587</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: correct behavior?</tt> </tt> +<a name="L588"></a><tt class="py-lineno">588</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-220" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-220', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"File %s exists already, overwriting..."</tt><tt class="py-op">)</tt> </tt> +<a name="L589"></a><tt class="py-lineno">589</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: I think we should upload to a temp file and not overwrite the</tt> </tt> +<a name="L590"></a><tt class="py-lineno">590</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># existing file until the file is successfully uploaded.</tt> </tt> +<a name="L591"></a><tt class="py-lineno">591</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">fileobj</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">path</tt><tt class="py-op">,</tt> <tt class="py-string">"wb"</tt><tt class="py-op">)</tt> </tt> +<a name="L592"></a><tt class="py-lineno">592</tt> <tt class="py-line"> </tt> +<a name="L593"></a><tt class="py-lineno">593</tt> <tt class="py-line"> <tt class="py-comment"># Options negotiation.</tt> </tt> +<a name="L594"></a><tt class="py-lineno">594</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">sendoack</tt><tt class="py-op">:</tt> </tt> +<a name="L595"></a><tt class="py-lineno">595</tt> <tt class="py-line"> <tt id="link-221" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-221', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Sending OACK to client"</tt><tt class="py-op">)</tt> </tt> +<a name="L596"></a><tt class="py-lineno">596</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-222" class="py-name"><a title="tftpy.TftpStates.TftpState.sendOACK" class="py-name" href="#" onclick="return doclink('link-222', 'sendOACK', 'link-212');">sendOACK</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L597"></a><tt class="py-lineno">597</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L598"></a><tt class="py-lineno">598</tt> <tt class="py-line"> <tt id="link-223" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-223', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"No requested options, starting send..."</tt><tt class="py-op">)</tt> </tt> +<a name="L599"></a><tt class="py-lineno">599</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-224" class="py-name"><a title="tftpy.TftpStates.TftpState.sendACK" class="py-name" href="#" onclick="return doclink('link-224', 'sendACK', 'link-185');">sendACK</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L600"></a><tt class="py-lineno">600</tt> <tt class="py-line"> <tt class="py-comment"># We may have sent an OACK, but we're expecting a DAT as the response</tt> </tt> +<a name="L601"></a><tt class="py-lineno">601</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># to either the OACK or an ACK, so lets unconditionally use the</tt> </tt> +<a name="L602"></a><tt class="py-lineno">602</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># TftpStateExpectDAT state.</tt> </tt> +<a name="L603"></a><tt class="py-lineno">603</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt id="link-225" class="py-name"><a title="tftpy.TftpStates.TftpStateExpectDAT" class="py-name" href="#" onclick="return doclink('link-225', 'TftpStateExpectDAT', 'link-203');">TftpStateExpectDAT</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L604"></a><tt class="py-lineno">604</tt> <tt class="py-line"> </tt> +<a name="L605"></a><tt class="py-lineno">605</tt> <tt class="py-line"> <tt class="py-comment"># Note, we don't have to check any other states in this method, that's</tt> </tt> +<a name="L606"></a><tt class="py-lineno">606</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># up to the caller.</tt> </tt> +<a name="L607"></a><tt class="py-lineno">607</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt> +<a name="TftpStateServerStart"></a><div id="TftpStateServerStart-def"><a name="L608"></a><tt class="py-lineno">608</tt> <a class="py-toggle" href="#" id="TftpStateServerStart-toggle" onclick="return toggle('TftpStateServerStart');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateServerStart-class.html">TftpStateServerStart</a><tt class="py-op">(</tt><tt class="py-base-class">TftpState</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateServerStart-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpStateServerStart-expanded"><a name="L609"></a><tt class="py-lineno">609</tt> <tt class="py-line"> <tt class="py-docstring">"""The start state for the server."""</tt> </tt> +<a name="TftpStateServerStart.handle"></a><div id="TftpStateServerStart.handle-def"><a name="L610"></a><tt class="py-lineno">610</tt> <a class="py-toggle" href="#" id="TftpStateServerStart.handle-toggle" onclick="return toggle('TftpStateServerStart.handle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateServerStart-class.html#handle">handle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkt</tt><tt class="py-op">,</tt> <tt class="py-param">raddress</tt><tt class="py-op">,</tt> <tt class="py-param">rport</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateServerStart.handle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpStateServerStart.handle-expanded"><a name="L611"></a><tt class="py-lineno">611</tt> <tt class="py-line"> <tt class="py-docstring">"""Handle a packet we just received."""</tt> </tt> +<a name="L612"></a><tt class="py-lineno">612</tt> <tt class="py-line"> <tt id="link-226" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-226', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"In TftpStateServerStart.handle"</tt><tt class="py-op">)</tt> </tt> +<a name="L613"></a><tt class="py-lineno">613</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-227" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketRRQ" class="py-name" href="#" onclick="return doclink('link-227', 'TftpPacketRRQ', 'link-88');">TftpPacketRRQ</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L614"></a><tt class="py-lineno">614</tt> <tt class="py-line"> <tt id="link-228" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-228', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Handling an RRQ packet"</tt><tt class="py-op">)</tt> </tt> +<a name="L615"></a><tt class="py-lineno">615</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-229" class="py-name" targets="Class tftpy.TftpStates.TftpStateServerRecvRRQ=tftpy.TftpStates.TftpStateServerRecvRRQ-class.html"><a title="tftpy.TftpStates.TftpStateServerRecvRRQ" class="py-name" href="#" onclick="return doclink('link-229', 'TftpStateServerRecvRRQ', 'link-229');">TftpStateServerRecvRRQ</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-230" class="py-name"><a title="tftpy.TftpStates.TftpState.handle +tftpy.TftpStates.TftpStateExpectACK.handle +tftpy.TftpStates.TftpStateExpectDAT.handle +tftpy.TftpStates.TftpStateSentRRQ.handle +tftpy.TftpStates.TftpStateSentWRQ.handle +tftpy.TftpStates.TftpStateServerRecvRRQ.handle +tftpy.TftpStates.TftpStateServerRecvWRQ.handle +tftpy.TftpStates.TftpStateServerStart.handle" class="py-name" href="#" onclick="return doclink('link-230', 'handle', 'link-36');">handle</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> </tt> +<a name="L616"></a><tt class="py-lineno">616</tt> <tt class="py-line"> <tt class="py-name">raddress</tt><tt class="py-op">,</tt> </tt> +<a name="L617"></a><tt class="py-lineno">617</tt> <tt class="py-line"> <tt class="py-name">rport</tt><tt class="py-op">)</tt> </tt> +<a name="L618"></a><tt class="py-lineno">618</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-231" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWRQ" class="py-name" href="#" onclick="return doclink('link-231', 'TftpPacketWRQ', 'link-63');">TftpPacketWRQ</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L619"></a><tt class="py-lineno">619</tt> <tt class="py-line"> <tt id="link-232" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-232', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Handling a WRQ packet"</tt><tt class="py-op">)</tt> </tt> +<a name="L620"></a><tt class="py-lineno">620</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-233" class="py-name" targets="Class tftpy.TftpStates.TftpStateServerRecvWRQ=tftpy.TftpStates.TftpStateServerRecvWRQ-class.html"><a title="tftpy.TftpStates.TftpStateServerRecvWRQ" class="py-name" href="#" onclick="return doclink('link-233', 'TftpStateServerRecvWRQ', 'link-233');">TftpStateServerRecvWRQ</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-234" class="py-name"><a title="tftpy.TftpStates.TftpState.handle +tftpy.TftpStates.TftpStateExpectACK.handle +tftpy.TftpStates.TftpStateExpectDAT.handle +tftpy.TftpStates.TftpStateSentRRQ.handle +tftpy.TftpStates.TftpStateSentWRQ.handle +tftpy.TftpStates.TftpStateServerRecvRRQ.handle +tftpy.TftpStates.TftpStateServerRecvWRQ.handle +tftpy.TftpStates.TftpStateServerStart.handle" class="py-name" href="#" onclick="return doclink('link-234', 'handle', 'link-36');">handle</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> </tt> +<a name="L621"></a><tt class="py-lineno">621</tt> <tt class="py-line"> <tt class="py-name">raddress</tt><tt class="py-op">,</tt> </tt> +<a name="L622"></a><tt class="py-lineno">622</tt> <tt class="py-line"> <tt class="py-name">rport</tt><tt class="py-op">)</tt> </tt> +<a name="L623"></a><tt class="py-lineno">623</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L624"></a><tt class="py-lineno">624</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-235" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-235', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-236" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-236', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-237" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-237', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L625"></a><tt class="py-lineno">625</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-238" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-238', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> \ </tt> +<a name="L626"></a><tt class="py-lineno">626</tt> <tt class="py-line"> <tt class="py-string">"Invalid packet to begin up/download: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">pkt</tt> </tt> +</div></div><a name="L627"></a><tt class="py-lineno">627</tt> <tt class="py-line"> </tt> +<a name="TftpStateExpectACK"></a><div id="TftpStateExpectACK-def"><a name="L628"></a><tt class="py-lineno">628</tt> <a class="py-toggle" href="#" id="TftpStateExpectACK-toggle" onclick="return toggle('TftpStateExpectACK');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateExpectACK-class.html">TftpStateExpectACK</a><tt class="py-op">(</tt><tt class="py-base-class">TftpState</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateExpectACK-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpStateExpectACK-expanded"><a name="L629"></a><tt class="py-lineno">629</tt> <tt class="py-line"> <tt class="py-docstring">"""This class represents the state of the transfer when a DAT was just</tt> </tt> +<a name="L630"></a><tt class="py-lineno">630</tt> <tt class="py-line"><tt class="py-docstring"> sent, and we are waiting for an ACK from the server. This class is the</tt> </tt> +<a name="L631"></a><tt class="py-lineno">631</tt> <tt class="py-line"><tt class="py-docstring"> same one used by the client during the upload, and the server during the</tt> </tt> +<a name="L632"></a><tt class="py-lineno">632</tt> <tt class="py-line"><tt class="py-docstring"> download."""</tt> </tt> +<a name="TftpStateExpectACK.handle"></a><div id="TftpStateExpectACK.handle-def"><a name="L633"></a><tt class="py-lineno">633</tt> <a class="py-toggle" href="#" id="TftpStateExpectACK.handle-toggle" onclick="return toggle('TftpStateExpectACK.handle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateExpectACK-class.html#handle">handle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkt</tt><tt class="py-op">,</tt> <tt class="py-param">raddress</tt><tt class="py-op">,</tt> <tt class="py-param">rport</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateExpectACK.handle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpStateExpectACK.handle-expanded"><a name="L634"></a><tt class="py-lineno">634</tt> <tt class="py-line"> <tt class="py-docstring">"Handle a packet, hopefully an ACK since we just sent a DAT."</tt> </tt> +<a name="L635"></a><tt class="py-lineno">635</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-239" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketACK" class="py-name" href="#" onclick="return doclink('link-239', 'TftpPacketACK', 'link-166');">TftpPacketACK</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L636"></a><tt class="py-lineno">636</tt> <tt class="py-line"> <tt id="link-240" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-240', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Received ACK for packet %d"</tt> <tt class="py-op">%</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L637"></a><tt class="py-lineno">637</tt> <tt class="py-line"> <tt class="py-comment"># Is this an ack to the one we just sent?</tt> </tt> +<a name="L638"></a><tt class="py-lineno">638</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-241" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-241', 'next_block', 'link-9');">next_block</a></tt> <tt class="py-op">==</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">:</tt> </tt> +<a name="L639"></a><tt class="py-lineno">639</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">pending_complete</tt><tt class="py-op">:</tt> </tt> +<a name="L640"></a><tt class="py-lineno">640</tt> <tt class="py-line"> <tt id="link-242" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-242', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Received ACK to final DAT, we're done."</tt><tt class="py-op">)</tt> </tt> +<a name="L641"></a><tt class="py-lineno">641</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt> +<a name="L642"></a><tt class="py-lineno">642</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L643"></a><tt class="py-lineno">643</tt> <tt class="py-line"> <tt id="link-243" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-243', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Good ACK, sending next DAT"</tt><tt class="py-op">)</tt> </tt> +<a name="L644"></a><tt class="py-lineno">644</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-244" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-244', 'next_block', 'link-9');">next_block</a></tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt> +<a name="L645"></a><tt class="py-lineno">645</tt> <tt class="py-line"> <tt id="link-245" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-245', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Incremented next_block to %d"</tt> </tt> +<a name="L646"></a><tt class="py-lineno">646</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-246" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-246', 'next_block', 'link-9');">next_block</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L647"></a><tt class="py-lineno">647</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">pending_complete</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-247" class="py-name"><a title="tftpy.TftpStates.TftpState.sendDAT" class="py-name" href="#" onclick="return doclink('link-247', 'sendDAT', 'link-215');">sendDAT</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L648"></a><tt class="py-lineno">648</tt> <tt class="py-line"> </tt> +<a name="L649"></a><tt class="py-lineno">649</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> <tt class="py-op"><</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-248" class="py-name"><a title="tftpy.TftpStates.TftpContext.next_block" class="py-name" href="#" onclick="return doclink('link-248', 'next_block', 'link-9');">next_block</a></tt><tt class="py-op">:</tt> </tt> +<a name="L650"></a><tt class="py-lineno">650</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt id="link-249" class="py-name"><a title="tftpy.TftpStates.TftpMetrics.add_dup" class="py-name" href="#" onclick="return doclink('link-249', 'add_dup', 'link-155');">add_dup</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L651"></a><tt class="py-lineno">651</tt> <tt class="py-line"> </tt> +<a name="L652"></a><tt class="py-lineno">652</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L653"></a><tt class="py-lineno">653</tt> <tt class="py-line"> <tt id="link-250" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-250', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Oooh, time warp. Received ACK to packet we "</tt> </tt> +<a name="L654"></a><tt class="py-lineno">654</tt> <tt class="py-line"> <tt class="py-string">"didn't send yet. Discarding."</tt><tt class="py-op">)</tt> </tt> +<a name="L655"></a><tt class="py-lineno">655</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">metrics</tt><tt class="py-op">.</tt><tt class="py-name">errors</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt> +<a name="L656"></a><tt class="py-lineno">656</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +<a name="L657"></a><tt class="py-lineno">657</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-251" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketERR" class="py-name" href="#" onclick="return doclink('link-251', 'TftpPacketERR', 'link-170');">TftpPacketERR</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L658"></a><tt class="py-lineno">658</tt> <tt class="py-line"> <tt id="link-252" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-252', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"Received ERR packet from peer: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L659"></a><tt class="py-lineno">659</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-253" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-253', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> \ </tt> +<a name="L660"></a><tt class="py-lineno">660</tt> <tt class="py-line"> <tt class="py-string">"Received ERR packet from peer: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +<a name="L661"></a><tt class="py-lineno">661</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L662"></a><tt class="py-lineno">662</tt> <tt class="py-line"> <tt id="link-254" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-254', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Discarding unsupported packet: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L663"></a><tt class="py-lineno">663</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div></div><a name="L664"></a><tt class="py-lineno">664</tt> <tt class="py-line"> </tt> +<a name="TftpStateExpectDAT"></a><div id="TftpStateExpectDAT-def"><a name="L665"></a><tt class="py-lineno">665</tt> <a class="py-toggle" href="#" id="TftpStateExpectDAT-toggle" onclick="return toggle('TftpStateExpectDAT');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateExpectDAT-class.html">TftpStateExpectDAT</a><tt class="py-op">(</tt><tt class="py-base-class">TftpState</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateExpectDAT-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpStateExpectDAT-expanded"><a name="L666"></a><tt class="py-lineno">666</tt> <tt class="py-line"> <tt class="py-docstring">"""Just sent an ACK packet. Waiting for DAT."""</tt> </tt> +<a name="TftpStateExpectDAT.handle"></a><div id="TftpStateExpectDAT.handle-def"><a name="L667"></a><tt class="py-lineno">667</tt> <a class="py-toggle" href="#" id="TftpStateExpectDAT.handle-toggle" onclick="return toggle('TftpStateExpectDAT.handle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateExpectDAT-class.html#handle">handle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkt</tt><tt class="py-op">,</tt> <tt class="py-param">raddress</tt><tt class="py-op">,</tt> <tt class="py-param">rport</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateExpectDAT.handle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpStateExpectDAT.handle-expanded"><a name="L668"></a><tt class="py-lineno">668</tt> <tt class="py-line"> <tt class="py-docstring">"""Handle the packet in response to an ACK, which should be a DAT."""</tt> </tt> +<a name="L669"></a><tt class="py-lineno">669</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-255" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketDAT" class="py-name" href="#" onclick="return doclink('link-255', 'TftpPacketDAT', 'link-159');">TftpPacketDAT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L670"></a><tt class="py-lineno">670</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-256" class="py-name" targets="Method tftpy.TftpStates.TftpState.handleDat()=tftpy.TftpStates.TftpState-class.html#handleDat"><a title="tftpy.TftpStates.TftpState.handleDat" class="py-name" href="#" onclick="return doclink('link-256', 'handleDat', 'link-256');">handleDat</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +<a name="L671"></a><tt class="py-lineno">671</tt> <tt class="py-line"> </tt> +<a name="L672"></a><tt class="py-lineno">672</tt> <tt class="py-line"> <tt class="py-comment"># Every other packet type is a problem.</tt> </tt> +<a name="L673"></a><tt class="py-lineno">673</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-257" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketACK" class="py-name" href="#" onclick="return doclink('link-257', 'TftpPacketACK', 'link-166');">TftpPacketACK</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L674"></a><tt class="py-lineno">674</tt> <tt class="py-line"> <tt class="py-comment"># Umm, we ACK, you don't.</tt> </tt> +<a name="L675"></a><tt class="py-lineno">675</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-258" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-258', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-259" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-259', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-260" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-260', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L676"></a><tt class="py-lineno">676</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-261" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-261', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received ACK from peer when expecting DAT"</tt> </tt> +<a name="L677"></a><tt class="py-lineno">677</tt> <tt class="py-line"> </tt> +<a name="L678"></a><tt class="py-lineno">678</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-262" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWRQ" class="py-name" href="#" onclick="return doclink('link-262', 'TftpPacketWRQ', 'link-63');">TftpPacketWRQ</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L679"></a><tt class="py-lineno">679</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-263" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-263', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-264" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-264', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-265" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-265', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L680"></a><tt class="py-lineno">680</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-266" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-266', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received WRQ from peer when expecting DAT"</tt> </tt> +<a name="L681"></a><tt class="py-lineno">681</tt> <tt class="py-line"> </tt> +<a name="L682"></a><tt class="py-lineno">682</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-267" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketERR" class="py-name" href="#" onclick="return doclink('link-267', 'TftpPacketERR', 'link-170');">TftpPacketERR</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L683"></a><tt class="py-lineno">683</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-268" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-268', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-269" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-269', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-270" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-270', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L684"></a><tt class="py-lineno">684</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-271" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-271', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received ERR from peer: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +<a name="L685"></a><tt class="py-lineno">685</tt> <tt class="py-line"> </tt> +<a name="L686"></a><tt class="py-lineno">686</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L687"></a><tt class="py-lineno">687</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-272" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-272', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-273" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-273', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-274" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-274', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L688"></a><tt class="py-lineno">688</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-275" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-275', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received unknown packet type from peer: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +</div></div><a name="L689"></a><tt class="py-lineno">689</tt> <tt class="py-line"> </tt> +<a name="TftpStateSentWRQ"></a><div id="TftpStateSentWRQ-def"><a name="L690"></a><tt class="py-lineno">690</tt> <a class="py-toggle" href="#" id="TftpStateSentWRQ-toggle" onclick="return toggle('TftpStateSentWRQ');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateSentWRQ-class.html">TftpStateSentWRQ</a><tt class="py-op">(</tt><tt class="py-base-class">TftpState</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateSentWRQ-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpStateSentWRQ-expanded"><a name="L691"></a><tt class="py-lineno">691</tt> <tt class="py-line"> <tt class="py-docstring">"""Just sent an WRQ packet for an upload."""</tt> </tt> +<a name="TftpStateSentWRQ.handle"></a><div id="TftpStateSentWRQ.handle-def"><a name="L692"></a><tt class="py-lineno">692</tt> <a class="py-toggle" href="#" id="TftpStateSentWRQ.handle-toggle" onclick="return toggle('TftpStateSentWRQ.handle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateSentWRQ-class.html#handle">handle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkt</tt><tt class="py-op">,</tt> <tt class="py-param">raddress</tt><tt class="py-op">,</tt> <tt class="py-param">rport</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateSentWRQ.handle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpStateSentWRQ.handle-expanded"><a name="L693"></a><tt class="py-lineno">693</tt> <tt class="py-line"> <tt class="py-docstring">"""Handle a packet we just received."""</tt> </tt> +<a name="L694"></a><tt class="py-lineno">694</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt><tt class="py-op">:</tt> </tt> +<a name="L695"></a><tt class="py-lineno">695</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt> <tt class="py-op">=</tt> <tt class="py-name">rport</tt> </tt> +<a name="L696"></a><tt class="py-lineno">696</tt> <tt class="py-line"> <tt id="link-276" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-276', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Set remote port for session to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">rport</tt><tt class="py-op">)</tt> </tt> +<a name="L697"></a><tt class="py-lineno">697</tt> <tt class="py-line"> </tt> +<a name="L698"></a><tt class="py-lineno">698</tt> <tt class="py-line"> <tt class="py-comment"># If we're going to successfully transfer the file, then we should see</tt> </tt> +<a name="L699"></a><tt class="py-lineno">699</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># either an OACK for accepted options, or an ACK to ignore options.</tt> </tt> +<a name="L700"></a><tt class="py-lineno">700</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-277" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketOACK" class="py-name" href="#" onclick="return doclink('link-277', 'TftpPacketOACK', 'link-175');">TftpPacketOACK</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L701"></a><tt class="py-lineno">701</tt> <tt class="py-line"> <tt id="link-278" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-278', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Received OACK from server"</tt><tt class="py-op">)</tt> </tt> +<a name="L702"></a><tt class="py-lineno">702</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L703"></a><tt class="py-lineno">703</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-279" class="py-name" targets="Method tftpy.TftpStates.TftpState.handleOACK()=tftpy.TftpStates.TftpState-class.html#handleOACK"><a title="tftpy.TftpStates.TftpState.handleOACK" class="py-name" href="#" onclick="return doclink('link-279', 'handleOACK', 'link-279');">handleOACK</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +<a name="L704"></a><tt class="py-lineno">704</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-280" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-280', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-name">err</tt><tt class="py-op">:</tt> </tt> +<a name="L705"></a><tt class="py-lineno">705</tt> <tt class="py-line"> <tt id="link-281" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-281', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"Failed to negotiate options"</tt><tt class="py-op">)</tt> </tt> +<a name="L706"></a><tt class="py-lineno">706</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-282" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-282', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-283" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-283', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-284" class="py-name" targets="Variable tftpy.TftpShared.TftpErrors.FailedNegotiation=tftpy.TftpShared.TftpErrors-class.html#FailedNegotiation"><a title="tftpy.TftpShared.TftpErrors.FailedNegotiation" class="py-name" href="#" onclick="return doclink('link-284', 'FailedNegotiation', 'link-284');">FailedNegotiation</a></tt><tt class="py-op">)</tt> </tt> +<a name="L707"></a><tt class="py-lineno">707</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt> +<a name="L708"></a><tt class="py-lineno">708</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L709"></a><tt class="py-lineno">709</tt> <tt class="py-line"> <tt id="link-285" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-285', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Sending first DAT packet"</tt><tt class="py-op">)</tt> </tt> +<a name="L710"></a><tt class="py-lineno">710</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">pending_complete</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-286" class="py-name"><a title="tftpy.TftpStates.TftpState.sendDAT" class="py-name" href="#" onclick="return doclink('link-286', 'sendDAT', 'link-215');">sendDAT</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L711"></a><tt class="py-lineno">711</tt> <tt class="py-line"> <tt id="link-287" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-287', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Changing state to TftpStateExpectACK"</tt><tt class="py-op">)</tt> </tt> +<a name="L712"></a><tt class="py-lineno">712</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-288" class="py-name"><a title="tftpy.TftpStates.TftpStateExpectACK" class="py-name" href="#" onclick="return doclink('link-288', 'TftpStateExpectACK', 'link-216');">TftpStateExpectACK</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">)</tt> </tt> +<a name="L713"></a><tt class="py-lineno">713</tt> <tt class="py-line"> </tt> +<a name="L714"></a><tt class="py-lineno">714</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-289" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketACK" class="py-name" href="#" onclick="return doclink('link-289', 'TftpPacketACK', 'link-166');">TftpPacketACK</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L715"></a><tt class="py-lineno">715</tt> <tt class="py-line"> <tt id="link-290" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-290', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Received ACK from server"</tt><tt class="py-op">)</tt> </tt> +<a name="L716"></a><tt class="py-lineno">716</tt> <tt class="py-line"> <tt id="link-291" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-291', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Apparently the server ignored our options"</tt><tt class="py-op">)</tt> </tt> +<a name="L717"></a><tt class="py-lineno">717</tt> <tt class="py-line"> <tt class="py-comment"># The block number should be zero.</tt> </tt> +<a name="L718"></a><tt class="py-lineno">718</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt> +<a name="L719"></a><tt class="py-lineno">719</tt> <tt class="py-line"> <tt id="link-292" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-292', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Ack blocknumber is zero as expected"</tt><tt class="py-op">)</tt> </tt> +<a name="L720"></a><tt class="py-lineno">720</tt> <tt class="py-line"> <tt id="link-293" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-293', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Sending first DAT packet"</tt><tt class="py-op">)</tt> </tt> +<a name="L721"></a><tt class="py-lineno">721</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pending_complete</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-294" class="py-name"><a title="tftpy.TftpStates.TftpState.sendDAT" class="py-name" href="#" onclick="return doclink('link-294', 'sendDAT', 'link-215');">sendDAT</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt> +<a name="L722"></a><tt class="py-lineno">722</tt> <tt class="py-line"> <tt id="link-295" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-295', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Changing state to TftpStateExpectACK"</tt><tt class="py-op">)</tt> </tt> +<a name="L723"></a><tt class="py-lineno">723</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-296" class="py-name"><a title="tftpy.TftpStates.TftpStateExpectACK" class="py-name" href="#" onclick="return doclink('link-296', 'TftpStateExpectACK', 'link-216');">TftpStateExpectACK</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">)</tt> </tt> +<a name="L724"></a><tt class="py-lineno">724</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L725"></a><tt class="py-lineno">725</tt> <tt class="py-line"> <tt id="link-297" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-297', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">warn</tt><tt class="py-op">(</tt><tt class="py-string">"Discarding ACK to block %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">pkt</tt><tt class="py-op">.</tt><tt class="py-name">blocknumber</tt><tt class="py-op">)</tt> </tt> +<a name="L726"></a><tt class="py-lineno">726</tt> <tt class="py-line"> <tt id="link-298" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-298', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Still waiting for valid response from server"</tt><tt class="py-op">)</tt> </tt> +<a name="L727"></a><tt class="py-lineno">727</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +<a name="L728"></a><tt class="py-lineno">728</tt> <tt class="py-line"> </tt> +<a name="L729"></a><tt class="py-lineno">729</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-299" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketERR" class="py-name" href="#" onclick="return doclink('link-299', 'TftpPacketERR', 'link-170');">TftpPacketERR</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L730"></a><tt class="py-lineno">730</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-300" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-300', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-301" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-301', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-302" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-302', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L731"></a><tt class="py-lineno">731</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-303" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-303', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received ERR from server: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +<a name="L732"></a><tt class="py-lineno">732</tt> <tt class="py-line"> </tt> +<a name="L733"></a><tt class="py-lineno">733</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-304" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketRRQ" class="py-name" href="#" onclick="return doclink('link-304', 'TftpPacketRRQ', 'link-88');">TftpPacketRRQ</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L734"></a><tt class="py-lineno">734</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-305" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-305', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-306" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-306', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-307" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-307', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L735"></a><tt class="py-lineno">735</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-308" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-308', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received RRQ from server while in upload"</tt> </tt> +<a name="L736"></a><tt class="py-lineno">736</tt> <tt class="py-line"> </tt> +<a name="L737"></a><tt class="py-lineno">737</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-309" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketDAT" class="py-name" href="#" onclick="return doclink('link-309', 'TftpPacketDAT', 'link-159');">TftpPacketDAT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L738"></a><tt class="py-lineno">738</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-310" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-310', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-311" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-311', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-312" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-312', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L739"></a><tt class="py-lineno">739</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-313" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-313', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received DAT from server while in upload"</tt> </tt> +<a name="L740"></a><tt class="py-lineno">740</tt> <tt class="py-line"> </tt> +<a name="L741"></a><tt class="py-lineno">741</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L742"></a><tt class="py-lineno">742</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-314" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-314', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-315" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-315', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-316" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-316', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L743"></a><tt class="py-lineno">743</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-317" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-317', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received unknown packet type from server: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +<a name="L744"></a><tt class="py-lineno">744</tt> <tt class="py-line"> </tt> +<a name="L745"></a><tt class="py-lineno">745</tt> <tt class="py-line"> <tt class="py-comment"># By default, no state change.</tt> </tt> +<a name="L746"></a><tt class="py-lineno">746</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div></div><a name="L747"></a><tt class="py-lineno">747</tt> <tt class="py-line"> </tt> +<a name="TftpStateSentRRQ"></a><div id="TftpStateSentRRQ-def"><a name="L748"></a><tt class="py-lineno">748</tt> <a class="py-toggle" href="#" id="TftpStateSentRRQ-toggle" onclick="return toggle('TftpStateSentRRQ');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateSentRRQ-class.html">TftpStateSentRRQ</a><tt class="py-op">(</tt><tt class="py-base-class">TftpState</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateSentRRQ-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TftpStateSentRRQ-expanded"><a name="L749"></a><tt class="py-lineno">749</tt> <tt class="py-line"> <tt class="py-docstring">"""Just sent an RRQ packet."""</tt> </tt> +<a name="TftpStateSentRRQ.handle"></a><div id="TftpStateSentRRQ.handle-def"><a name="L750"></a><tt class="py-lineno">750</tt> <a class="py-toggle" href="#" id="TftpStateSentRRQ.handle-toggle" onclick="return toggle('TftpStateSentRRQ.handle');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="tftpy.TftpStates.TftpStateSentRRQ-class.html#handle">handle</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pkt</tt><tt class="py-op">,</tt> <tt class="py-param">raddress</tt><tt class="py-op">,</tt> <tt class="py-param">rport</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +</div><div id="TftpStateSentRRQ.handle-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TftpStateSentRRQ.handle-expanded"><a name="L751"></a><tt class="py-lineno">751</tt> <tt class="py-line"> <tt class="py-docstring">"""Handle the packet in response to an RRQ to the server."""</tt> </tt> +<a name="L752"></a><tt class="py-lineno">752</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt><tt class="py-op">:</tt> </tt> +<a name="L753"></a><tt class="py-lineno">753</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt class="py-name">tidport</tt> <tt class="py-op">=</tt> <tt class="py-name">rport</tt> </tt> +<a name="L754"></a><tt class="py-lineno">754</tt> <tt class="py-line"> <tt id="link-318" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-318', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Set remote port for session to %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">rport</tt><tt class="py-op">)</tt> </tt> +<a name="L755"></a><tt class="py-lineno">755</tt> <tt class="py-line"> </tt> +<a name="L756"></a><tt class="py-lineno">756</tt> <tt class="py-line"> <tt class="py-comment"># Now check the packet type and dispatch it properly.</tt> </tt> +<a name="L757"></a><tt class="py-lineno">757</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-319" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketOACK" class="py-name" href="#" onclick="return doclink('link-319', 'TftpPacketOACK', 'link-175');">TftpPacketOACK</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L758"></a><tt class="py-lineno">758</tt> <tt class="py-line"> <tt id="link-320" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-320', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Received OACK from server"</tt><tt class="py-op">)</tt> </tt> +<a name="L759"></a><tt class="py-lineno">759</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt> +<a name="L760"></a><tt class="py-lineno">760</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-321" class="py-name"><a title="tftpy.TftpStates.TftpState.handleOACK" class="py-name" href="#" onclick="return doclink('link-321', 'handleOACK', 'link-279');">handleOACK</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +<a name="L761"></a><tt class="py-lineno">761</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-322" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-322', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-name">err</tt><tt class="py-op">:</tt> </tt> +<a name="L762"></a><tt class="py-lineno">762</tt> <tt class="py-line"> <tt id="link-323" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-323', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">"Failed to negotiate options: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">err</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt> +<a name="L763"></a><tt class="py-lineno">763</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-324" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-324', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-325" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-325', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-326" class="py-name"><a title="tftpy.TftpShared.TftpErrors.FailedNegotiation" class="py-name" href="#" onclick="return doclink('link-326', 'FailedNegotiation', 'link-284');">FailedNegotiation</a></tt><tt class="py-op">)</tt> </tt> +<a name="L764"></a><tt class="py-lineno">764</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> </tt> +<a name="L765"></a><tt class="py-lineno">765</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L766"></a><tt class="py-lineno">766</tt> <tt class="py-line"> <tt id="link-327" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-327', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Sending ACK to OACK"</tt><tt class="py-op">)</tt> </tt> +<a name="L767"></a><tt class="py-lineno">767</tt> <tt class="py-line"> </tt> +<a name="L768"></a><tt class="py-lineno">768</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-328" class="py-name"><a title="tftpy.TftpStates.TftpState.sendACK" class="py-name" href="#" onclick="return doclink('link-328', 'sendACK', 'link-185');">sendACK</a></tt><tt class="py-op">(</tt><tt class="py-name">blocknumber</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt> +<a name="L769"></a><tt class="py-lineno">769</tt> <tt class="py-line"> </tt> +<a name="L770"></a><tt class="py-lineno">770</tt> <tt class="py-line"> <tt id="link-329" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-329', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">"Changing state to TftpStateExpectDAT"</tt><tt class="py-op">)</tt> </tt> +<a name="L771"></a><tt class="py-lineno">771</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-330" class="py-name"><a title="tftpy.TftpStates.TftpStateExpectDAT" class="py-name" href="#" onclick="return doclink('link-330', 'TftpStateExpectDAT', 'link-203');">TftpStateExpectDAT</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">)</tt> </tt> +<a name="L772"></a><tt class="py-lineno">772</tt> <tt class="py-line"> </tt> +<a name="L773"></a><tt class="py-lineno">773</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-331" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketDAT" class="py-name" href="#" onclick="return doclink('link-331', 'TftpPacketDAT', 'link-159');">TftpPacketDAT</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L774"></a><tt class="py-lineno">774</tt> <tt class="py-line"> <tt class="py-comment"># If there are any options set, then the server didn't honour any</tt> </tt> +<a name="L775"></a><tt class="py-lineno">775</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># of them.</tt> </tt> +<a name="L776"></a><tt class="py-lineno">776</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-332" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-332', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Received DAT from server"</tt><tt class="py-op">)</tt> </tt> +<a name="L777"></a><tt class="py-lineno">777</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-333" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-333', 'options', 'link-8');">options</a></tt><tt class="py-op">:</tt> </tt> +<a name="L778"></a><tt class="py-lineno">778</tt> <tt class="py-line"> <tt id="link-334" class="py-name"><a title="tftpy.TftpClient'.log +tftpy.TftpPacketFactory'.log +tftpy.TftpServer'.log +tftpy.TftpShared.log" class="py-name" href="#" onclick="return doclink('link-334', 'log', 'link-3');">log</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"Server ignored options, falling back to defaults"</tt><tt class="py-op">)</tt> </tt> +<a name="L779"></a><tt class="py-lineno">779</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">context</tt><tt class="py-op">.</tt><tt id="link-335" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWithOptions.options" class="py-name" href="#" onclick="return doclink('link-335', 'options', 'link-8');">options</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> <tt class="py-string">'blksize'</tt><tt class="py-op">:</tt> <tt id="link-336" class="py-name"><a title="tftpy.TftpClient'.DEF_BLKSIZE +tftpy.TftpPacketFactory'.DEF_BLKSIZE +tftpy.TftpServer'.DEF_BLKSIZE +tftpy.TftpShared.DEF_BLKSIZE" class="py-name" href="#" onclick="return doclink('link-336', 'DEF_BLKSIZE', 'link-131');">DEF_BLKSIZE</a></tt> <tt class="py-op">}</tt> </tt> +<a name="L780"></a><tt class="py-lineno">780</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-337" class="py-name"><a title="tftpy.TftpStates.TftpState.handleDat" class="py-name" href="#" onclick="return doclink('link-337', 'handleDat', 'link-256');">handleDat</a></tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +<a name="L781"></a><tt class="py-lineno">781</tt> <tt class="py-line"> </tt> +<a name="L782"></a><tt class="py-lineno">782</tt> <tt class="py-line"> <tt class="py-comment"># Every other packet type is a problem.</tt> </tt> +<a name="L783"></a><tt class="py-lineno">783</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-338" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketACK" class="py-name" href="#" onclick="return doclink('link-338', 'TftpPacketACK', 'link-166');">TftpPacketACK</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L784"></a><tt class="py-lineno">784</tt> <tt class="py-line"> <tt class="py-comment"># Umm, we ACK, the server doesn't.</tt> </tt> +<a name="L785"></a><tt class="py-lineno">785</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-339" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-339', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-340" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-340', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-341" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-341', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L786"></a><tt class="py-lineno">786</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-342" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-342', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received ACK from server while in download"</tt> </tt> +<a name="L787"></a><tt class="py-lineno">787</tt> <tt class="py-line"> </tt> +<a name="L788"></a><tt class="py-lineno">788</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-343" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketWRQ" class="py-name" href="#" onclick="return doclink('link-343', 'TftpPacketWRQ', 'link-63');">TftpPacketWRQ</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L789"></a><tt class="py-lineno">789</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-344" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-344', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-345" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-345', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-346" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-346', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L790"></a><tt class="py-lineno">790</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-347" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-347', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received WRQ from server while in download"</tt> </tt> +<a name="L791"></a><tt class="py-lineno">791</tt> <tt class="py-line"> </tt> +<a name="L792"></a><tt class="py-lineno">792</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">,</tt> <tt id="link-348" class="py-name"><a title="tftpy.TftpPacketTypes.TftpPacketERR" class="py-name" href="#" onclick="return doclink('link-348', 'TftpPacketERR', 'link-170');">TftpPacketERR</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt> +<a name="L793"></a><tt class="py-lineno">793</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-349" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-349', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-350" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-350', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-351" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-351', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L794"></a><tt class="py-lineno">794</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-352" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-352', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received ERR from server: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +<a name="L795"></a><tt class="py-lineno">795</tt> <tt class="py-line"> </tt> +<a name="L796"></a><tt class="py-lineno">796</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt> +<a name="L797"></a><tt class="py-lineno">797</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-353" class="py-name"><a title="tftpy.TftpStates.TftpState.sendError" class="py-name" href="#" onclick="return doclink('link-353', 'sendError', 'link-137');">sendError</a></tt><tt class="py-op">(</tt><tt id="link-354" class="py-name"><a title="tftpy.TftpShared.TftpErrors" class="py-name" href="#" onclick="return doclink('link-354', 'TftpErrors', 'link-138');">TftpErrors</a></tt><tt class="py-op">.</tt><tt id="link-355" class="py-name"><a title="tftpy.TftpShared.TftpErrors.IllegalTftpOp" class="py-name" href="#" onclick="return doclink('link-355', 'IllegalTftpOp', 'link-139');">IllegalTftpOp</a></tt><tt class="py-op">)</tt> </tt> +<a name="L798"></a><tt class="py-lineno">798</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-356" class="py-name"><a title="tftpy.TftpShared.TftpException" class="py-name" href="#" onclick="return doclink('link-356', 'TftpException', 'link-15');">TftpException</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Received unknown packet type from server: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">pkt</tt><tt class="py-op">)</tt> </tt> +<a name="L799"></a><tt class="py-lineno">799</tt> <tt class="py-line"> </tt> +<a name="L800"></a><tt class="py-lineno">800</tt> <tt class="py-line"> <tt class="py-comment"># By default, no state change.</tt> </tt> +<a name="L801"></a><tt class="py-lineno">801</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt> +</div></div><a name="L802"></a><tt class="py-lineno">802</tt> <tt class="py-line"> </tt><script type="text/javascript"> +<!-- +expandto(location.href); +// --> +</script> +</pre> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:22 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpContext-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpContext-class.html new file mode 100644 index 0000000..838e280 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpContext-class.html @@ -0,0 +1,455 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpContext</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpContext + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpContext-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpContext</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContext">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <strong class="uidshort">TftpContext</strong> +</pre> + +<dl><dt>Known Subclasses:</dt> +<dd> + <ul class="subclass-list"> +<li><a href="tftpy.TftpStates.TftpContextClientDownload-class.html">TftpContextClientDownload</a></li><li>, <a href="tftpy.TftpStates.TftpContextClientUpload-class.html">TftpContextClientUpload</a></li><li>, <a href="tftpy.TftpStates.TftpContextServer-class.html">TftpContextServer</a></li> </ul> +</dd></dl> + +<hr /> +<p>The base class of the contexts.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpContext-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">host</span>, + <span class="summary-sig-arg">port</span>, + <span class="summary-sig-arg">timeout</span>)</span><br /> + Constructor for the base context, setting shared instance variables.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContext.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="checkTimeout"></a><span class="summary-sig-name">checkTimeout</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">now</span>)</span><br /> + Compare current time with last_update time, and raise an exception if + we're over SOCK_TIMEOUT time.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContext.checkTimeout">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="start"></a><span class="summary-sig-name">start</span>(<span class="summary-sig-arg">self</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContext.start">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="end"></a><span class="summary-sig-name">end</span>(<span class="summary-sig-arg">self</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContext.end">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="gethost"></a><span class="summary-sig-name">gethost</span>(<span class="summary-sig-arg">self</span>)</span><br /> + Simple getter method for use in a property.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContext.gethost">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="sethost"></a><span class="summary-sig-name">sethost</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">host</span>)</span><br /> + Setter method that also sets the address property as a result of the + host that is set.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContext.sethost">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="setNextBlock"></a><span class="summary-sig-name">setNextBlock</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">block</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContext.setNextBlock">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="getNextBlock"></a><span class="summary-sig-name">getNextBlock</span>(<span class="summary-sig-arg">self</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContext.getNextBlock">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="cycle"></a><span class="summary-sig-name">cycle</span>(<span class="summary-sig-arg">self</span>)</span><br /> + Here we wait for a response from the server after sending it + something, and dispatch appropriate action to that response.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContext.cycle">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpContext-class.html#host" class="summary-name">host</a><br /> + Simple getter method for use in a property. + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <a href="tftpy.TftpStates.TftpContext-class.html#next_block" class="summary-name">next_block</a> + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">host</span>, + <span class="sig-arg">port</span>, + <span class="sig-arg">timeout</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContext.__init__">source code</a></span> + </td> + </tr></table> + + <p>Constructor for the base context, setting shared instance + variables.</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== PROPERTY DETAILS ==================== --> +<a name="section-PropertyDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Property Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-PropertyDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="host"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <h3 class="epydoc">host</h3> + <p>Simple getter method for use in a property.</p> + <dl class="fields"> + <dt>Get Method:</dt> + <dd class="value"><span class="summary-sig"><a href="tftpy.TftpStates.TftpContext-class.html#gethost" class="summary-sig-name">gethost</a>(<span class="summary-sig-arg">self</span>)</span> + - Simple getter method for use in a property. + </dd> + <dt>Set Method:</dt> + <dd class="value"><span class="summary-sig"><a href="tftpy.TftpStates.TftpContext-class.html#sethost" class="summary-sig-name">sethost</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">host</span>)</span> + - Setter method that also sets the address property as a result of the + host that is set. + </dd> + </dl> +</td></tr></table> +</div> +<a name="next_block"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <h3 class="epydoc">next_block</h3> + + <dl class="fields"> + <dt>Get Method:</dt> + <dd class="value"><span class="summary-sig"><a href="tftpy.TftpStates.TftpContext-class.html#getNextBlock" class="summary-sig-name">getNextBlock</a>(<span class="summary-sig-arg">self</span>)</span> + </dd> + <dt>Set Method:</dt> + <dd class="value"><span class="summary-sig"><a href="tftpy.TftpStates.TftpContext-class.html#setNextBlock" class="summary-sig-name">setNextBlock</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">block</span>)</span> + </dd> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpContextClientDownload-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpContextClientDownload-class.html new file mode 100644 index 0000000..ac77766 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpContextClientDownload-class.html @@ -0,0 +1,339 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpContextClientDownload</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpContextClientDownload + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpContextClientDownload-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpContextClientDownload</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientDownload">source code</a></span></p> +<pre class="base-tree"> + object --+ + | +<a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a> --+ + | + <strong class="uidshort">TftpContextClientDownload</strong> +</pre> + +<hr /> +<p>The download context for the client during a download.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpContextClientDownload-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">host</span>, + <span class="summary-sig-arg">port</span>, + <span class="summary-sig-arg">filename</span>, + <span class="summary-sig-arg">output</span>, + <span class="summary-sig-arg">options</span>, + <span class="summary-sig-arg">packethook</span>, + <span class="summary-sig-arg">timeout</span>)</span><br /> + Constructor for the base context, setting shared instance variables.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientDownload.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpContextClientDownload-class.html#start" class="summary-sig-name">start</a>(<span class="summary-sig-arg">self</span>)</span><br /> + Initiate the download.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientDownload.start">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpContextClientDownload-class.html#end" class="summary-sig-name">end</a>(<span class="summary-sig-arg">self</span>)</span><br /> + Finish up the context.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientDownload.end">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a></code></b>: + <code><a href="tftpy.TftpStates.TftpContext-class.html#checkTimeout">checkTimeout</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#cycle">cycle</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#getNextBlock">getNextBlock</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#gethost">gethost</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#setNextBlock">setNextBlock</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#sethost">sethost</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a></code></b>: + <code><a href="tftpy.TftpStates.TftpContext-class.html#host">host</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#next_block">next_block</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">host</span>, + <span class="sig-arg">port</span>, + <span class="sig-arg">filename</span>, + <span class="sig-arg">output</span>, + <span class="sig-arg">options</span>, + <span class="sig-arg">packethook</span>, + <span class="sig-arg">timeout</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientDownload.__init__">source code</a></span> + </td> + </tr></table> + + <p>Constructor for the base context, setting shared instance + variables.</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="start"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">start</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientDownload.start">source code</a></span> + </td> + </tr></table> + + <p>Initiate the download.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpContext-class.html#start">TftpContext.start</a> + </dt> + </dl> +</td></tr></table> +</div> +<a name="end"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">end</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientDownload.end">source code</a></span> + </td> + </tr></table> + + <p>Finish up the context.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpContext-class.html#end">TftpContext.end</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpContextClientUpload-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpContextClientUpload-class.html new file mode 100644 index 0000000..e4e768f --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpContextClientUpload-class.html @@ -0,0 +1,338 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpContextClientUpload</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpContextClientUpload + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpContextClientUpload-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpContextClientUpload</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientUpload">source code</a></span></p> +<pre class="base-tree"> + object --+ + | +<a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a> --+ + | + <strong class="uidshort">TftpContextClientUpload</strong> +</pre> + +<hr /> +<p>The upload context for the client during an upload.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpContextClientUpload-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">host</span>, + <span class="summary-sig-arg">port</span>, + <span class="summary-sig-arg">filename</span>, + <span class="summary-sig-arg">input</span>, + <span class="summary-sig-arg">options</span>, + <span class="summary-sig-arg">packethook</span>, + <span class="summary-sig-arg">timeout</span>)</span><br /> + Constructor for the base context, setting shared instance variables.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientUpload.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpContextClientUpload-class.html#start" class="summary-sig-name">start</a>(<span class="summary-sig-arg">self</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientUpload.start">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpContextClientUpload-class.html#end" class="summary-sig-name">end</a>(<span class="summary-sig-arg">self</span>)</span><br /> + Finish up the context.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientUpload.end">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a></code></b>: + <code><a href="tftpy.TftpStates.TftpContext-class.html#checkTimeout">checkTimeout</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#cycle">cycle</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#getNextBlock">getNextBlock</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#gethost">gethost</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#setNextBlock">setNextBlock</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#sethost">sethost</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a></code></b>: + <code><a href="tftpy.TftpStates.TftpContext-class.html#host">host</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#next_block">next_block</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">host</span>, + <span class="sig-arg">port</span>, + <span class="sig-arg">filename</span>, + <span class="sig-arg">input</span>, + <span class="sig-arg">options</span>, + <span class="sig-arg">packethook</span>, + <span class="sig-arg">timeout</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientUpload.__init__">source code</a></span> + </td> + </tr></table> + + <p>Constructor for the base context, setting shared instance + variables.</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="start"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">start</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientUpload.start">source code</a></span> + </td> + </tr></table> + + + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpContext-class.html#start">TftpContext.start</a> + </dt> + </dl> +</td></tr></table> +</div> +<a name="end"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">end</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextClientUpload.end">source code</a></span> + </td> + </tr></table> + + <p>Finish up the context.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpContext-class.html#end">TftpContext.end</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpContextServer-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpContextServer-class.html new file mode 100644 index 0000000..5b6e1d3 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpContextServer-class.html @@ -0,0 +1,339 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpContextServer</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpContextServer + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpContextServer-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpContextServer</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextServer">source code</a></span></p> +<pre class="base-tree"> + object --+ + | +<a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a> --+ + | + <strong class="uidshort">TftpContextServer</strong> +</pre> + +<hr /> +<p>The context for the server.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpContextServer-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">host</span>, + <span class="summary-sig-arg">port</span>, + <span class="summary-sig-arg">timeout</span>, + <span class="summary-sig-arg">root</span>, + <span class="summary-sig-arg">dyn_file_func</span>)</span><br /> + Constructor for the base context, setting shared instance variables.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextServer.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpContextServer-class.html#start" class="summary-sig-name">start</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">buffer</span>)</span><br /> + Start the state cycle.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextServer.start">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpContextServer-class.html#end" class="summary-sig-name">end</a>(<span class="summary-sig-arg">self</span>)</span><br /> + Finish up the context.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextServer.end">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a></code></b>: + <code><a href="tftpy.TftpStates.TftpContext-class.html#checkTimeout">checkTimeout</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#cycle">cycle</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#getNextBlock">getNextBlock</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#gethost">gethost</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#setNextBlock">setNextBlock</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#sethost">sethost</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpContext-class.html">TftpContext</a></code></b>: + <code><a href="tftpy.TftpStates.TftpContext-class.html#host">host</a></code>, + <code><a href="tftpy.TftpStates.TftpContext-class.html#next_block">next_block</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">host</span>, + <span class="sig-arg">port</span>, + <span class="sig-arg">timeout</span>, + <span class="sig-arg">root</span>, + <span class="sig-arg">dyn_file_func</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextServer.__init__">source code</a></span> + </td> + </tr></table> + + <p>Constructor for the base context, setting shared instance + variables.</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<a name="start"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">start</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">buffer</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextServer.start">source code</a></span> + </td> + </tr></table> + + <p>Start the state cycle. Note that the server context receives an + initial packet in its start method. Also note that the server does not + loop on cycle(), as it expects the TftpServer object to manage that.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpContext-class.html#start">TftpContext.start</a> + </dt> + </dl> +</td></tr></table> +</div> +<a name="end"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">end</span>(<span class="sig-arg">self</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpContextServer.end">source code</a></span> + </td> + </tr></table> + + <p>Finish up the context.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpContext-class.html#end">TftpContext.end</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpMetrics-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpMetrics-class.html new file mode 100644 index 0000000..51add67 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpMetrics-class.html @@ -0,0 +1,267 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpMetrics</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpMetrics + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpMetrics-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpMetrics</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpMetrics">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <strong class="uidshort">TftpMetrics</strong> +</pre> + +<hr /> +<p>A class representing metrics of the transfer.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpMetrics-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br /> + x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpMetrics.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="compute"></a><span class="summary-sig-name">compute</span>(<span class="summary-sig-arg">self</span>)</span></td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpMetrics.compute">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="add_dup"></a><span class="summary-sig-name">add_dup</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">blocknumber</span>)</span><br /> + This method adds a dup for a block number to the metrics.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpMetrics.add_dup">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpMetrics.__init__">source code</a></span> + </td> + </tr></table> + + <p>x.__init__(...) initializes x; see x.__class__.__doc__ for + signature</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + <dd><em class="note">(inherited documentation)</em></dd> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpState-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpState-class.html new file mode 100644 index 0000000..f261c55 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpState-class.html @@ -0,0 +1,508 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpState</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpState + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpState-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpState</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <strong class="uidshort">TftpState</strong> +</pre> + +<dl><dt>Known Subclasses:</dt> +<dd> + <ul class="subclass-list"> +<li><a href="tftpy.TftpStates.TftpStateExpectACK-class.html">TftpStateExpectACK</a></li><li>, <a href="tftpy.TftpStates.TftpStateExpectDAT-class.html">TftpStateExpectDAT</a></li><li>, <a href="tftpy.TftpStates.TftpStateSentRRQ-class.html">TftpStateSentRRQ</a></li><li>, <a href="tftpy.TftpStates.TftpStateSentWRQ-class.html">TftpStateSentWRQ</a></li><li>, <a href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html">TftpStateServerRecvRRQ</a></li><li>, <a href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html">TftpStateServerRecvWRQ</a></li><li>, <a href="tftpy.TftpStates.TftpStateServerStart-class.html">TftpStateServerStart</a></li> </ul> +</dd></dl> + +<hr /> +<p>The base class for the states.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpState-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">context</span>)</span><br /> + Constructor for setting up common instance variables.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.__init__">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpState-class.html#handle" class="summary-sig-name">handle</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">pkt</span>, + <span class="summary-sig-arg">raddress</span>, + <span class="summary-sig-arg">rport</span>)</span><br /> + An abstract method for handling a packet.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.handle">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="handleOACK"></a><span class="summary-sig-name">handleOACK</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">pkt</span>)</span><br /> + This method handles an OACK from the server, syncing any accepted + options.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.handleOACK">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="returnSupportedOptions"></a><span class="summary-sig-name">returnSupportedOptions</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">options</span>)</span><br /> + This method takes a requested options list from a client, and returns + the ones that are supported.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.returnSupportedOptions">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpState-class.html#serverInitial" class="summary-sig-name">serverInitial</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">pkt</span>, + <span class="summary-sig-arg">raddress</span>, + <span class="summary-sig-arg">rport</span>)</span><br /> + This method performs initial setup for a server context transfer, put + here to refactor code out of the TftpStateServerRecvRRQ and + TftpStateServerRecvWRQ classes, since their initial setup is + identical.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.serverInitial">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpState-class.html#sendDAT" class="summary-sig-name">sendDAT</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">resend</span>=<span class="summary-sig-default">False</span>)</span><br /> + This method sends the next DAT packet based on the data in the + context.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.sendDAT">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpState-class.html#sendACK" class="summary-sig-name">sendACK</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">blocknumber</span>=<span class="summary-sig-default">None</span>)</span><br /> + This method sends an ack packet to the block number specified.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.sendACK">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="sendError"></a><span class="summary-sig-name">sendError</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">errorcode</span>)</span><br /> + This method uses the socket passed, and uses the errorcode to compose + and send an error packet.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.sendError">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="sendOACK"></a><span class="summary-sig-name">sendOACK</span>(<span class="summary-sig-arg">self</span>)</span><br /> + This method sends an OACK packet with the options from the current + context.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.sendOACK">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a name="handleDat"></a><span class="summary-sig-name">handleDat</span>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">pkt</span>)</span><br /> + This method handles a DAT packet during a client download, or a + server upload.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.handleDat">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="__init__"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">context</span>)</span> + <br /><em class="fname">(Constructor)</em> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.__init__">source code</a></span> + </td> + </tr></table> + + <p>Constructor for setting up common instance variables. The involved + file object is required, since in tftp there's always a file + involved.</p> + <dl class="fields"> + <dt>Overrides: + object.__init__ + </dt> + </dl> +</td></tr></table> +</div> +<a name="handle"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">handle</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">pkt</span>, + <span class="sig-arg">raddress</span>, + <span class="sig-arg">rport</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.handle">source code</a></span> + </td> + </tr></table> + + <p>An abstract method for handling a packet. It is expected to return a + TftpState object, either itself or a new state.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<a name="serverInitial"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">serverInitial</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">pkt</span>, + <span class="sig-arg">raddress</span>, + <span class="sig-arg">rport</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.serverInitial">source code</a></span> + </td> + </tr></table> + + <p>This method performs initial setup for a server context transfer, put + here to refactor code out of the TftpStateServerRecvRRQ and + TftpStateServerRecvWRQ classes, since their initial setup is identical. + The method returns a boolean, sendoack, to indicate whether it is + required to send an OACK to the client.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<a name="sendDAT"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">sendDAT</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">resend</span>=<span class="sig-default">False</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.sendDAT">source code</a></span> + </td> + </tr></table> + + <p>This method sends the next DAT packet based on the data in the + context. It returns a boolean indicating whether the transfer is + finished.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<a name="sendACK"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">sendACK</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">blocknumber</span>=<span class="sig-default">None</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpState.sendACK">source code</a></span> + </td> + </tr></table> + + <p>This method sends an ack packet to the block number specified. If none + is specified, it defaults to the next_block property in the parent + context.</p> + <dl class="fields"> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpStateExpectACK-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpStateExpectACK-class.html new file mode 100644 index 0000000..f17ae86 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpStateExpectACK-class.html @@ -0,0 +1,252 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpStateExpectACK</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpStateExpectACK + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpStateExpectACK-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpStateExpectACK</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateExpectACK">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a> --+ + | + <strong class="uidshort">TftpStateExpectACK</strong> +</pre> + +<hr /> +<p>This class represents the state of the transfer when a DAT was just + sent, and we are waiting for an ACK from the server. This class is the + same one used by the client during the upload, and the server during the + download.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpStateExpectACK-class.html#handle" class="summary-sig-name">handle</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">pkt</span>, + <span class="summary-sig-arg">raddress</span>, + <span class="summary-sig-arg">rport</span>)</span><br /> + Handle a packet, hopefully an ACK since we just sent a DAT.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateExpectACK.handle">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpState-class.html">TftpState</a></code></b>: + <code><a href="tftpy.TftpStates.TftpState-class.html#__init__">__init__</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleDat">handleDat</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleOACK">handleOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#returnSupportedOptions">returnSupportedOptions</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendACK">sendACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendDAT">sendDAT</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendError">sendError</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendOACK">sendOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#serverInitial">serverInitial</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="handle"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">handle</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">pkt</span>, + <span class="sig-arg">raddress</span>, + <span class="sig-arg">rport</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateExpectACK.handle">source code</a></span> + </td> + </tr></table> + + <p>Handle a packet, hopefully an ACK since we just sent a DAT.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpState-class.html#handle">TftpState.handle</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpStateExpectDAT-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpStateExpectDAT-class.html new file mode 100644 index 0000000..1daefd0 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpStateExpectDAT-class.html @@ -0,0 +1,249 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpStateExpectDAT</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpStateExpectDAT + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpStateExpectDAT-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpStateExpectDAT</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateExpectDAT">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a> --+ + | + <strong class="uidshort">TftpStateExpectDAT</strong> +</pre> + +<hr /> +<p>Just sent an ACK packet. Waiting for DAT.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpStateExpectDAT-class.html#handle" class="summary-sig-name">handle</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">pkt</span>, + <span class="summary-sig-arg">raddress</span>, + <span class="summary-sig-arg">rport</span>)</span><br /> + Handle the packet in response to an ACK, which should be a DAT.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateExpectDAT.handle">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpState-class.html">TftpState</a></code></b>: + <code><a href="tftpy.TftpStates.TftpState-class.html#__init__">__init__</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleDat">handleDat</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleOACK">handleOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#returnSupportedOptions">returnSupportedOptions</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendACK">sendACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendDAT">sendDAT</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendError">sendError</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendOACK">sendOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#serverInitial">serverInitial</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="handle"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">handle</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">pkt</span>, + <span class="sig-arg">raddress</span>, + <span class="sig-arg">rport</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateExpectDAT.handle">source code</a></span> + </td> + </tr></table> + + <p>Handle the packet in response to an ACK, which should be a DAT.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpState-class.html#handle">TftpState.handle</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpStateSentRRQ-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpStateSentRRQ-class.html new file mode 100644 index 0000000..ea8f49a --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpStateSentRRQ-class.html @@ -0,0 +1,249 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpStateSentRRQ</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpStateSentRRQ + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpStateSentRRQ-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpStateSentRRQ</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateSentRRQ">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a> --+ + | + <strong class="uidshort">TftpStateSentRRQ</strong> +</pre> + +<hr /> +<p>Just sent an RRQ packet.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpStateSentRRQ-class.html#handle" class="summary-sig-name">handle</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">pkt</span>, + <span class="summary-sig-arg">raddress</span>, + <span class="summary-sig-arg">rport</span>)</span><br /> + Handle the packet in response to an RRQ to the server.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateSentRRQ.handle">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpState-class.html">TftpState</a></code></b>: + <code><a href="tftpy.TftpStates.TftpState-class.html#__init__">__init__</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleDat">handleDat</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleOACK">handleOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#returnSupportedOptions">returnSupportedOptions</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendACK">sendACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendDAT">sendDAT</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendError">sendError</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendOACK">sendOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#serverInitial">serverInitial</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="handle"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">handle</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">pkt</span>, + <span class="sig-arg">raddress</span>, + <span class="sig-arg">rport</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateSentRRQ.handle">source code</a></span> + </td> + </tr></table> + + <p>Handle the packet in response to an RRQ to the server.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpState-class.html#handle">TftpState.handle</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpStateSentWRQ-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpStateSentWRQ-class.html new file mode 100644 index 0000000..09d9cee --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpStateSentWRQ-class.html @@ -0,0 +1,249 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpStateSentWRQ</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpStateSentWRQ + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpStateSentWRQ-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpStateSentWRQ</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateSentWRQ">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a> --+ + | + <strong class="uidshort">TftpStateSentWRQ</strong> +</pre> + +<hr /> +<p>Just sent an WRQ packet for an upload.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpStateSentWRQ-class.html#handle" class="summary-sig-name">handle</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">pkt</span>, + <span class="summary-sig-arg">raddress</span>, + <span class="summary-sig-arg">rport</span>)</span><br /> + Handle a packet we just received.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateSentWRQ.handle">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpState-class.html">TftpState</a></code></b>: + <code><a href="tftpy.TftpStates.TftpState-class.html#__init__">__init__</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleDat">handleDat</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleOACK">handleOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#returnSupportedOptions">returnSupportedOptions</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendACK">sendACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendDAT">sendDAT</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendError">sendError</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendOACK">sendOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#serverInitial">serverInitial</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="handle"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">handle</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">pkt</span>, + <span class="sig-arg">raddress</span>, + <span class="sig-arg">rport</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateSentWRQ.handle">source code</a></span> + </td> + </tr></table> + + <p>Handle a packet we just received.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpState-class.html#handle">TftpState.handle</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpStateServerRecvRRQ-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpStateServerRecvRRQ-class.html new file mode 100644 index 0000000..3574d16 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpStateServerRecvRRQ-class.html @@ -0,0 +1,250 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpStateServerRecvRRQ</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpStateServerRecvRRQ + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpStateServerRecvRRQ</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateServerRecvRRQ">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a> --+ + | + <strong class="uidshort">TftpStateServerRecvRRQ</strong> +</pre> + +<hr /> +<p>This class represents the state of the TFTP server when it has just + received an RRQ packet.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html#handle" class="summary-sig-name">handle</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">pkt</span>, + <span class="summary-sig-arg">raddress</span>, + <span class="summary-sig-arg">rport</span>)</span><br /> + Handle an initial RRQ packet as a server.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateServerRecvRRQ.handle">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpState-class.html">TftpState</a></code></b>: + <code><a href="tftpy.TftpStates.TftpState-class.html#__init__">__init__</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleDat">handleDat</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleOACK">handleOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#returnSupportedOptions">returnSupportedOptions</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendACK">sendACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendDAT">sendDAT</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendError">sendError</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendOACK">sendOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#serverInitial">serverInitial</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="handle"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">handle</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">pkt</span>, + <span class="sig-arg">raddress</span>, + <span class="sig-arg">rport</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateServerRecvRRQ.handle">source code</a></span> + </td> + </tr></table> + + <p>Handle an initial RRQ packet as a server.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpState-class.html#handle">TftpState.handle</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpStateServerRecvWRQ-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpStateServerRecvWRQ-class.html new file mode 100644 index 0000000..a093e93 --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpStateServerRecvWRQ-class.html @@ -0,0 +1,250 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpStateServerRecvWRQ</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpStateServerRecvWRQ + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpStateServerRecvWRQ</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateServerRecvWRQ">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a> --+ + | + <strong class="uidshort">TftpStateServerRecvWRQ</strong> +</pre> + +<hr /> +<p>This class represents the state of the TFTP server when it has just + received a WRQ packet.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html#handle" class="summary-sig-name">handle</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">pkt</span>, + <span class="summary-sig-arg">raddress</span>, + <span class="summary-sig-arg">rport</span>)</span><br /> + Handle an initial WRQ packet as a server.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateServerRecvWRQ.handle">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpState-class.html">TftpState</a></code></b>: + <code><a href="tftpy.TftpStates.TftpState-class.html#__init__">__init__</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleDat">handleDat</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleOACK">handleOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#returnSupportedOptions">returnSupportedOptions</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendACK">sendACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendDAT">sendDAT</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendError">sendError</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendOACK">sendOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#serverInitial">serverInitial</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="handle"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">handle</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">pkt</span>, + <span class="sig-arg">raddress</span>, + <span class="sig-arg">rport</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateServerRecvWRQ.handle">source code</a></span> + </td> + </tr></table> + + <p>Handle an initial WRQ packet as a server.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpState-class.html#handle">TftpState.handle</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/tftpy.TftpStates.TftpStateServerStart-class.html b/html/tftpy-doc/tftpy.TftpStates.TftpStateServerStart-class.html new file mode 100644 index 0000000..6f66f3b --- /dev/null +++ b/html/tftpy-doc/tftpy.TftpStates.TftpStateServerStart-class.html @@ -0,0 +1,249 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy.TftpStates.TftpStateServerStart</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table width="100%" cellpadding="0" cellspacing="0"> + <tr valign="top"> + <td width="100%"> + <span class="breadcrumbs"> + <a href="tftpy-module.html">Package tftpy</a> :: + <a href="tftpy.TftpStates-module.html">Module TftpStates</a> :: + Class TftpStateServerStart + </span> + </td> + <td> + <table cellpadding="0" cellspacing="0"> + <!-- hide/show private --> + <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span></td></tr> + <tr><td align="right"><span class="options" + >[<a href="frames.html" target="_top">frames</a + >] | <a href="tftpy.TftpStates.TftpStateServerStart-class.html" + target="_top">no frames</a>]</span></td></tr> + </table> + </td> + </tr> +</table> +<!-- ==================== CLASS DESCRIPTION ==================== --> +<h1 class="epydoc">Class TftpStateServerStart</h1><p class="nomargin-top"><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateServerStart">source code</a></span></p> +<pre class="base-tree"> +object --+ + | + <a href="tftpy.TftpStates.TftpState-class.html">TftpState</a> --+ + | + <strong class="uidshort">TftpStateServerStart</strong> +</pre> + +<hr /> +<p>The start state for the server.</p> + +<!-- ==================== INSTANCE METHODS ==================== --> +<a name="section-InstanceMethods"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Instance Methods</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-InstanceMethods" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +<tr> + <td width="15%" align="right" valign="top" class="summary"> + <span class="summary-type"> </span> + </td><td class="summary"> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr> + <td><span class="summary-sig"><a href="tftpy.TftpStates.TftpStateServerStart-class.html#handle" class="summary-sig-name">handle</a>(<span class="summary-sig-arg">self</span>, + <span class="summary-sig-arg">pkt</span>, + <span class="summary-sig-arg">raddress</span>, + <span class="summary-sig-arg">rport</span>)</span><br /> + Handle a packet we just received.</td> + <td align="right" valign="top"> + <span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateServerStart.handle">source code</a></span> + + </td> + </tr> + </table> + + </td> + </tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code><a href="tftpy.TftpStates.TftpState-class.html">TftpState</a></code></b>: + <code><a href="tftpy.TftpStates.TftpState-class.html#__init__">__init__</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleDat">handleDat</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#handleOACK">handleOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#returnSupportedOptions">returnSupportedOptions</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendACK">sendACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendDAT">sendDAT</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendError">sendError</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#sendOACK">sendOACK</a></code>, + <code><a href="tftpy.TftpStates.TftpState-class.html#serverInitial">serverInitial</a></code> + </p> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__delattr__</code>, + <code>__getattribute__</code>, + <code>__hash__</code>, + <code>__new__</code>, + <code>__reduce__</code>, + <code>__reduce_ex__</code>, + <code>__repr__</code>, + <code>__setattr__</code>, + <code>__str__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== PROPERTIES ==================== --> +<a name="section-Properties"></a> +<table class="summary" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Properties</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-Properties" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> + <tr> + <td colspan="2" class="summary"> + <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: + <code>__class__</code> + </p> + </td> + </tr> +</table> +<!-- ==================== METHOD DETAILS ==================== --> +<a name="section-MethodDetails"></a> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr bgcolor="#70b0f0" class="table-header"> + <td colspan="2" class="table-header"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr valign="top"> + <td align="left"><span class="table-header">Method Details</span></td> + <td align="right" valign="top" + ><span class="options">[<a href="#section-MethodDetails" + class="privatelink" onclick="toggle_private();" + >hide private</a>]</span></td> + </tr> + </table> + </td> +</tr> +</table> +<a name="handle"></a> +<div> +<table class="details" border="1" cellpadding="3" + cellspacing="0" width="100%" bgcolor="white"> +<tr><td> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tr valign="top"><td> + <h3 class="epydoc"><span class="sig"><span class="sig-name">handle</span>(<span class="sig-arg">self</span>, + <span class="sig-arg">pkt</span>, + <span class="sig-arg">raddress</span>, + <span class="sig-arg">rport</span>)</span> + </h3> + </td><td align="right" valign="top" + ><span class="codelink"><a href="tftpy.TftpStates-pysrc.html#TftpStateServerStart.handle">source code</a></span> + </td> + </tr></table> + + <p>Handle a packet we just received.</p> + <dl class="fields"> + <dt>Overrides: + <a href="tftpy.TftpStates.TftpState-class.html#handle">TftpState.handle</a> + </dt> + </dl> +</td></tr></table> +</div> +<br /> +<!-- ==================== NAVIGATION BAR ==================== --> +<table class="navbar" border="0" width="100%" cellpadding="0" + bgcolor="#a0c0ff" cellspacing="0"> + <tr valign="middle"> + <!-- Home link --> + <th> <a + href="tftpy-module.html">Home</a> </th> + + <!-- Tree link --> + <th> <a + href="module-tree.html">Trees</a> </th> + + <!-- Index link --> + <th> <a + href="identifier-index.html">Indices</a> </th> + + <!-- Help link --> + <th> <a + href="help.html">Help</a> </th> + + <th class="navbar" width="100%"></th> + </tr> +</table> +<table border="0" cellpadding="0" cellspacing="0" width="100%%"> + <tr> + <td align="left" class="footer"> + Generated by Epydoc 3.0.1 on Sat Oct 24 00:10:21 2009 + </td> + <td align="right" class="footer"> + <a target="mainFrame" href="http://epydoc.sourceforge.net" + >http://epydoc.sourceforge.net</a> + </td> + </tr> +</table> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/toc-everything.html b/html/tftpy-doc/toc-everything.html new file mode 100644 index 0000000..8f244e0 --- /dev/null +++ b/html/tftpy-doc/toc-everything.html @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>Everything</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<h1 class="toc">Everything</h1> +<hr /> + <h2 class="toc">All Classes</h2> + <a target="mainFrame" href="tftpy.TftpClient%27.TftpClient-class.html" + >tftpy.TftpClient'.TftpClient</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html" + >tftpy.TftpPacketFactory'.TftpPacketFactory</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacket-class.html" + >tftpy.TftpPacketTypes.TftpPacket</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketACK-class.html" + >tftpy.TftpPacketTypes.TftpPacketACK</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html" + >tftpy.TftpPacketTypes.TftpPacketDAT</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketERR-class.html" + >tftpy.TftpPacketTypes.TftpPacketERR</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html" + >tftpy.TftpPacketTypes.TftpPacketInitial</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html" + >tftpy.TftpPacketTypes.TftpPacketOACK</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html" + >tftpy.TftpPacketTypes.TftpPacketRRQ</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html" + >tftpy.TftpPacketTypes.TftpPacketWRQ</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html" + >tftpy.TftpPacketTypes.TftpPacketWithOptions</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpSession-class.html" + >tftpy.TftpPacketTypes.TftpSession</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27.TftpServer-class.html" + >tftpy.TftpServer'.TftpServer</a><br /> <a target="mainFrame" href="tftpy.TftpShared.TftpErrors-class.html" + >tftpy.TftpShared.TftpErrors</a><br /> <a target="mainFrame" href="tftpy.TftpShared.TftpException-class.html" + >tftpy.TftpShared.TftpException</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpContext-class.html" + >tftpy.TftpStates.TftpContext</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpContextClientDownload-class.html" + >tftpy.TftpStates.TftpContextClientDownload</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpContextClientUpload-class.html" + >tftpy.TftpStates.TftpContextClientUpload</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpContextServer-class.html" + >tftpy.TftpStates.TftpContextServer</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpMetrics-class.html" + >tftpy.TftpStates.TftpMetrics</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpState-class.html" + >tftpy.TftpStates.TftpState</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateExpectACK-class.html" + >tftpy.TftpStates.TftpStateExpectACK</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateExpectDAT-class.html" + >tftpy.TftpStates.TftpStateExpectDAT</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateSentRRQ-class.html" + >tftpy.TftpStates.TftpStateSentRRQ</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateSentWRQ-class.html" + >tftpy.TftpStates.TftpStateSentWRQ</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html" + >tftpy.TftpStates.TftpStateServerRecvRRQ</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html" + >tftpy.TftpStates.TftpStateServerRecvWRQ</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateServerStart-class.html" + >tftpy.TftpStates.TftpStateServerStart</a><br /> <h2 class="toc">All Functions</h2> + <a target="mainFrame" href="tftpy.TftpShared-module.html#setLogLevel" + >tftpy.TftpShared.setLogLevel</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#tftpassert" + >tftpy.TftpShared.tftpassert</a><br /> <h2 class="toc">All Variables</h2> + <a target="mainFrame" href="tftpy.TftpClient%27-module.html#DEF_BLKSIZE" + >tftpy.TftpClient'.DEF_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#DEF_TFTP_PORT" + >tftpy.TftpClient'.DEF_TFTP_PORT</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#LOG_LEVEL" + >tftpy.TftpClient'.LOG_LEVEL</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#MAX_BLKSIZE" + >tftpy.TftpClient'.MAX_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#MAX_DUPS" + >tftpy.TftpClient'.MAX_DUPS</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#MIN_BLKSIZE" + >tftpy.TftpClient'.MIN_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#SOCK_TIMEOUT" + >tftpy.TftpClient'.SOCK_TIMEOUT</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#TIMEOUT_RETRIES" + >tftpy.TftpClient'.TIMEOUT_RETRIES</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#log" + >tftpy.TftpClient'.log</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#DEF_BLKSIZE" + >tftpy.TftpPacketFactory'.DEF_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#DEF_TFTP_PORT" + >tftpy.TftpPacketFactory'.DEF_TFTP_PORT</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#LOG_LEVEL" + >tftpy.TftpPacketFactory'.LOG_LEVEL</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#MAX_BLKSIZE" + >tftpy.TftpPacketFactory'.MAX_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#MAX_DUPS" + >tftpy.TftpPacketFactory'.MAX_DUPS</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#MIN_BLKSIZE" + >tftpy.TftpPacketFactory'.MIN_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#SOCK_TIMEOUT" + >tftpy.TftpPacketFactory'.SOCK_TIMEOUT</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#TIMEOUT_RETRIES" + >tftpy.TftpPacketFactory'.TIMEOUT_RETRIES</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#log" + >tftpy.TftpPacketFactory'.log</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#DEF_BLKSIZE" + >tftpy.TftpServer'.DEF_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#DEF_TFTP_PORT" + >tftpy.TftpServer'.DEF_TFTP_PORT</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#LOG_LEVEL" + >tftpy.TftpServer'.LOG_LEVEL</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#MAX_BLKSIZE" + >tftpy.TftpServer'.MAX_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#MAX_DUPS" + >tftpy.TftpServer'.MAX_DUPS</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#MIN_BLKSIZE" + >tftpy.TftpServer'.MIN_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#SOCK_TIMEOUT" + >tftpy.TftpServer'.SOCK_TIMEOUT</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#TIMEOUT_RETRIES" + >tftpy.TftpServer'.TIMEOUT_RETRIES</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#log" + >tftpy.TftpServer'.log</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#DEF_BLKSIZE" + >tftpy.TftpShared.DEF_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#DEF_TFTP_PORT" + >tftpy.TftpShared.DEF_TFTP_PORT</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#LOG_LEVEL" + >tftpy.TftpShared.LOG_LEVEL</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#MAX_BLKSIZE" + >tftpy.TftpShared.MAX_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#MAX_DUPS" + >tftpy.TftpShared.MAX_DUPS</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#MIN_BLKSIZE" + >tftpy.TftpShared.MIN_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#SOCK_TIMEOUT" + >tftpy.TftpShared.SOCK_TIMEOUT</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#TIMEOUT_RETRIES" + >tftpy.TftpShared.TIMEOUT_RETRIES</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#log" + >tftpy.TftpShared.log</a><br /> <a target="mainFrame" href="tftpy-module.html#verlist" + >tftpy.verlist</a><br /><hr /> +<span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/toc-tftpy-module.html b/html/tftpy-doc/toc-tftpy-module.html new file mode 100644 index 0000000..7dfde74 --- /dev/null +++ b/html/tftpy-doc/toc-tftpy-module.html @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>tftpy</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<h1 class="toc">Module tftpy</h1> +<hr /> + <h2 class="toc">Variables</h2> + <a target="mainFrame" href="tftpy-module.html#verlist" + >verlist</a><br /><hr /> +<span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/toc-tftpy.TftpClient'-module.html b/html/tftpy-doc/toc-tftpy.TftpClient'-module.html new file mode 100644 index 0000000..a24abea --- /dev/null +++ b/html/tftpy-doc/toc-tftpy.TftpClient'-module.html @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>TftpClient'</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<h1 class="toc">Module TftpClient'</h1> +<hr /> + <h2 class="toc">Classes</h2> + <a target="mainFrame" href="tftpy.TftpClient%27.TftpClient-class.html" + >TftpClient</a><br /> <h2 class="toc">Variables</h2> + <a target="mainFrame" href="tftpy.TftpClient%27-module.html#DEF_BLKSIZE" + >DEF_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#DEF_TFTP_PORT" + >DEF_TFTP_PORT</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#LOG_LEVEL" + >LOG_LEVEL</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#MAX_BLKSIZE" + >MAX_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#MAX_DUPS" + >MAX_DUPS</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#MIN_BLKSIZE" + >MIN_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#SOCK_TIMEOUT" + >SOCK_TIMEOUT</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#TIMEOUT_RETRIES" + >TIMEOUT_RETRIES</a><br /> <a target="mainFrame" href="tftpy.TftpClient%27-module.html#log" + >log</a><br /><hr /> +<span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/toc-tftpy.TftpPacketFactory'-module.html b/html/tftpy-doc/toc-tftpy.TftpPacketFactory'-module.html new file mode 100644 index 0000000..b437bc5 --- /dev/null +++ b/html/tftpy-doc/toc-tftpy.TftpPacketFactory'-module.html @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>TftpPacketFactory'</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<h1 class="toc">Module TftpPacketFactory'</h1> +<hr /> + <h2 class="toc">Classes</h2> + <a target="mainFrame" href="tftpy.TftpPacketFactory%27.TftpPacketFactory-class.html" + >TftpPacketFactory</a><br /> <h2 class="toc">Variables</h2> + <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#DEF_BLKSIZE" + >DEF_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#DEF_TFTP_PORT" + >DEF_TFTP_PORT</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#LOG_LEVEL" + >LOG_LEVEL</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#MAX_BLKSIZE" + >MAX_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#MAX_DUPS" + >MAX_DUPS</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#MIN_BLKSIZE" + >MIN_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#SOCK_TIMEOUT" + >SOCK_TIMEOUT</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#TIMEOUT_RETRIES" + >TIMEOUT_RETRIES</a><br /> <a target="mainFrame" href="tftpy.TftpPacketFactory%27-module.html#log" + >log</a><br /><hr /> +<span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/toc-tftpy.TftpPacketTypes-module.html b/html/tftpy-doc/toc-tftpy.TftpPacketTypes-module.html new file mode 100644 index 0000000..69f9240 --- /dev/null +++ b/html/tftpy-doc/toc-tftpy.TftpPacketTypes-module.html @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>TftpPacketTypes</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<h1 class="toc">Module TftpPacketTypes</h1> +<hr /> + <h2 class="toc">Classes</h2> + <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacket-class.html" + >TftpPacket</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketACK-class.html" + >TftpPacketACK</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketDAT-class.html" + >TftpPacketDAT</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketERR-class.html" + >TftpPacketERR</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketInitial-class.html" + >TftpPacketInitial</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketOACK-class.html" + >TftpPacketOACK</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketRRQ-class.html" + >TftpPacketRRQ</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketWRQ-class.html" + >TftpPacketWRQ</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpPacketWithOptions-class.html" + >TftpPacketWithOptions</a><br /> <a target="mainFrame" href="tftpy.TftpPacketTypes.TftpSession-class.html" + >TftpSession</a><br /><hr /> +<span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/toc-tftpy.TftpServer'-module.html b/html/tftpy-doc/toc-tftpy.TftpServer'-module.html new file mode 100644 index 0000000..d40d425 --- /dev/null +++ b/html/tftpy-doc/toc-tftpy.TftpServer'-module.html @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>TftpServer'</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<h1 class="toc">Module TftpServer'</h1> +<hr /> + <h2 class="toc">Classes</h2> + <a target="mainFrame" href="tftpy.TftpServer%27.TftpServer-class.html" + >TftpServer</a><br /> <h2 class="toc">Variables</h2> + <a target="mainFrame" href="tftpy.TftpServer%27-module.html#DEF_BLKSIZE" + >DEF_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#DEF_TFTP_PORT" + >DEF_TFTP_PORT</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#LOG_LEVEL" + >LOG_LEVEL</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#MAX_BLKSIZE" + >MAX_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#MAX_DUPS" + >MAX_DUPS</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#MIN_BLKSIZE" + >MIN_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#SOCK_TIMEOUT" + >SOCK_TIMEOUT</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#TIMEOUT_RETRIES" + >TIMEOUT_RETRIES</a><br /> <a target="mainFrame" href="tftpy.TftpServer%27-module.html#log" + >log</a><br /><hr /> +<span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/toc-tftpy.TftpShared-module.html b/html/tftpy-doc/toc-tftpy.TftpShared-module.html new file mode 100644 index 0000000..e711d38 --- /dev/null +++ b/html/tftpy-doc/toc-tftpy.TftpShared-module.html @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>TftpShared</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<h1 class="toc">Module TftpShared</h1> +<hr /> + <h2 class="toc">Classes</h2> + <a target="mainFrame" href="tftpy.TftpShared.TftpErrors-class.html" + >TftpErrors</a><br /> <a target="mainFrame" href="tftpy.TftpShared.TftpException-class.html" + >TftpException</a><br /> <h2 class="toc">Functions</h2> + <a target="mainFrame" href="tftpy.TftpShared-module.html#setLogLevel" + >setLogLevel</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#tftpassert" + >tftpassert</a><br /> <h2 class="toc">Variables</h2> + <a target="mainFrame" href="tftpy.TftpShared-module.html#DEF_BLKSIZE" + >DEF_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#DEF_TFTP_PORT" + >DEF_TFTP_PORT</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#LOG_LEVEL" + >LOG_LEVEL</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#MAX_BLKSIZE" + >MAX_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#MAX_DUPS" + >MAX_DUPS</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#MIN_BLKSIZE" + >MIN_BLKSIZE</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#SOCK_TIMEOUT" + >SOCK_TIMEOUT</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#TIMEOUT_RETRIES" + >TIMEOUT_RETRIES</a><br /> <a target="mainFrame" href="tftpy.TftpShared-module.html#log" + >log</a><br /><hr /> +<span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/toc-tftpy.TftpStates-module.html b/html/tftpy-doc/toc-tftpy.TftpStates-module.html new file mode 100644 index 0000000..9430644 --- /dev/null +++ b/html/tftpy-doc/toc-tftpy.TftpStates-module.html @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>TftpStates</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<h1 class="toc">Module TftpStates</h1> +<hr /> + <h2 class="toc">Classes</h2> + <a target="mainFrame" href="tftpy.TftpStates.TftpContext-class.html" + >TftpContext</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpContextClientDownload-class.html" + >TftpContextClientDownload</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpContextClientUpload-class.html" + >TftpContextClientUpload</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpContextServer-class.html" + >TftpContextServer</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpMetrics-class.html" + >TftpMetrics</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpState-class.html" + >TftpState</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateExpectACK-class.html" + >TftpStateExpectACK</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateExpectDAT-class.html" + >TftpStateExpectDAT</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateSentRRQ-class.html" + >TftpStateSentRRQ</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateSentWRQ-class.html" + >TftpStateSentWRQ</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateServerRecvRRQ-class.html" + >TftpStateServerRecvRRQ</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateServerRecvWRQ-class.html" + >TftpStateServerRecvWRQ</a><br /> <a target="mainFrame" href="tftpy.TftpStates.TftpStateServerStart-class.html" + >TftpStateServerStart</a><br /><hr /> +<span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> diff --git a/html/tftpy-doc/toc.html b/html/tftpy-doc/toc.html new file mode 100644 index 0000000..77bff32 --- /dev/null +++ b/html/tftpy-doc/toc.html @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="ascii"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>Table of Contents</title> + <link rel="stylesheet" href="epydoc.css" type="text/css" /> + <script type="text/javascript" src="epydoc.js"></script> +</head> + +<body bgcolor="white" text="black" link="blue" vlink="#204080" + alink="#204080"> +<h1 class="toc">Table of Contents</h1> +<hr /> + <a target="moduleFrame" href="toc-everything.html">Everything</a> + <br /> + <h2 class="toc">Modules</h2> + <a target="moduleFrame" href="toc-tftpy-module.html" + onclick="setFrame('toc-tftpy-module.html','tftpy-module.html');" >tftpy</a><br /> <a target="moduleFrame" href="toc-tftpy.TftpClient%27-module.html" + onclick="setFrame('toc-tftpy.TftpClient%27-module.html','tftpy.TftpClient%27-module.html');" >tftpy.TftpClient'</a><br /> <a target="moduleFrame" href="toc-tftpy.TftpPacketFactory%27-module.html" + onclick="setFrame('toc-tftpy.TftpPacketFactory%27-module.html','tftpy.TftpPacketFactory%27-module.html');" >tftpy.TftpPacketFactory'</a><br /> <a target="moduleFrame" href="toc-tftpy.TftpPacketTypes-module.html" + onclick="setFrame('toc-tftpy.TftpPacketTypes-module.html','tftpy.TftpPacketTypes-module.html');" >tftpy.TftpPacketTypes</a><br /> <a target="moduleFrame" href="toc-tftpy.TftpServer%27-module.html" + onclick="setFrame('toc-tftpy.TftpServer%27-module.html','tftpy.TftpServer%27-module.html');" >tftpy.TftpServer'</a><br /> <a target="moduleFrame" href="toc-tftpy.TftpShared-module.html" + onclick="setFrame('toc-tftpy.TftpShared-module.html','tftpy.TftpShared-module.html');" >tftpy.TftpShared</a><br /> <a target="moduleFrame" href="toc-tftpy.TftpStates-module.html" + onclick="setFrame('toc-tftpy.TftpStates-module.html','tftpy.TftpStates-module.html');" >tftpy.TftpStates</a><br /><hr /> + <span class="options">[<a href="javascript:void(0);" class="privatelink" + onclick="toggle_private();">hide private</a>]</span> + +<script type="text/javascript"> + <!-- + // Private objects are initially displayed (because if + // javascript is turned off then we want them to be + // visible); but by default, we want to hide them. So hide + // them unless we have a cookie that says to show them. + checkCookie(); + // --> +</script> +</body> +</html> |