Documentation update for 0.6.0

master
Michael P. Soulier 2011-07-26 03:43:00 -04:00
parent 64478a31a6
commit 6ab5ea47e8
19 changed files with 1275 additions and 651 deletions

View File

@ -45,9 +45,9 @@ copyright = u'2010, Michael P. Soulier'
# built documents.
#
# The short X.Y version.
version = '0.5'
version = '0.6'
# The full version, including alpha/beta/rc tags.
release = '0.5.1'
release = '0.6.0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@ -101,6 +101,12 @@ The `TftpShared` Module
:members:
:show-inheritance:
The `TftpContexts` Module
~~~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: tftpy.TftpContexts
:members:
:show-inheritance:
The `TftpStates` Module
~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: tftpy.TftpStates

View File

@ -5,12 +5,12 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>TFTPy - A Pure Python TFTP Implementation</title>
<title>TFTPy - A Pure Python TFTP Protocol Implementation</title>
<link href="main.css" name="main" type="text/css" rel="stylesheet" />
</head>
<body>
<div class="banner">
<h1>TFTPy - A Pure Python TFTP Implementation</h1>
<h1>TFTPy - A Pure Python TFTP Protocol Implementation</h1>
</div>
<div class="menu">
<ul>

View File

@ -101,6 +101,12 @@ The `TftpShared` Module
:members:
:show-inheritance:
The `TftpContexts` Module
~~~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: tftpy.TftpContexts
:members:
:show-inheritance:
The `TftpStates` Module
~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: tftpy.TftpStates

View File

@ -1,6 +1,12 @@
/**
* Sphinx stylesheet -- basic theme
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
@ -127,6 +133,10 @@ span.linkdescr {
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
@ -152,6 +162,20 @@ img.toggler {
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- general body styles --------------------------------------------------- */
a.headerlink {
@ -189,6 +213,37 @@ p.rubric {
font-weight: bold;
}
img.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
clear: both;
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar {
@ -252,7 +307,7 @@ table.docutils {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 0;
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
@ -272,8 +327,37 @@ th {
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
dl {
margin-bottom: 15px;
}
@ -292,7 +376,7 @@ dd {
margin-left: 30px;
}
dt:target, .highlight {
dt:target, .highlighted {
background-color: #fbe54e;
}
@ -329,7 +413,7 @@ dl.glossary dt {
}
.footnote:target {
background-color: #ffa
background-color: #ffa;
}
.line-block {
@ -344,10 +428,23 @@ dl.glossary dt {
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
td.linenos pre {
@ -384,6 +481,20 @@ h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {

View File

@ -1,6 +1,12 @@
/**
* Sphinx stylesheet -- default theme
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/*
* default.css_t
* ~~~~~~~~~~~~~
*
* Sphinx stylesheet -- default theme.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@import url("basic.css");
@ -107,21 +113,27 @@ div.sphinxsidebar input {
font-size: 1em;
}
/* -- body styles ----------------------------------------------------------- */
/* -- hyperlink styles ------------------------------------------------------ */
a {
color: #355f7c;
text-decoration: none;
}
a:visited {
color: #355f7c;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
div.body p, div.body dd, div.body li {
text-align: justify;
line-height: 130%;
}
/* -- body styles ----------------------------------------------------------- */
div.body h1,
div.body h2,
@ -221,10 +233,24 @@ tt {
font-size: 0.95em;
}
th {
background-color: #ede;
}
.warning tt {
background: #efc2c2;
}
.note tt {
background: #d6d6d6;
}
.viewcode-back {
font-family: sans-serif;
}
div.viewcode-block:target {
background-color: #f4debf;
border-top: 1px solid #ac9;
border-bottom: 1px solid #ac9;
}

View File

@ -1,16 +1,31 @@
/// XXX: make it cross browser
/*
* doctools.js
* ~~~~~~~~~~~
*
* Sphinx JavaScript utilties for all documentation.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
*/
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {}
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
@ -44,7 +59,7 @@ jQuery.getQueryParameters = function(s) {
result[key] = [value];
}
return result;
}
};
/**
* small function to check if an array contains
@ -56,7 +71,7 @@ jQuery.contains = function(arr, item) {
return true;
}
return false;
}
};
/**
* highlight a given string on a jquery object by wrapping it in
@ -67,7 +82,7 @@ jQuery.fn.highlightText = function(text, className) {
if (node.nodeType == 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 && !jQuery.className.has(node.parentNode, className)) {
if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
var span = document.createElement("span");
span.className = className;
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
@ -79,14 +94,14 @@ jQuery.fn.highlightText = function(text, className) {
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this)
highlight(this);
});
}
}
return this.each(function() {
highlight(this);
});
}
};
/**
* Small JavaScript module for the documentation.
@ -96,7 +111,7 @@ var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initModIndex();
this.initIndexTable();
},
/**
@ -107,7 +122,7 @@ var Documentation = {
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can savely bound to a different name (_ = Documentation.gettext)
// can safely bound to a different name (_ = Documentation.gettext)
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated == 'undefined')
@ -167,7 +182,7 @@ var Documentation = {
var body = $('div.body');
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlight');
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<li class="highlight-link"><a href="javascript:Documentation.' +
@ -177,19 +192,19 @@ var Documentation = {
},
/**
* init the modindex toggle buttons
* init the domain index toggle buttons
*/
initModIndex : function() {
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
console.log($('tr.cg-' + idnum).toggle());
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) == 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_MODINDEX) {
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
@ -199,7 +214,7 @@ var Documentation = {
*/
hideSearchWords : function() {
$('.sidebar .this-page-menu li.highlight-link').fadeOut(300);
$('span.highlight').removeClass('highlight');
$('span.highlighted').removeClass('highlighted');
},
/**

File diff suppressed because one or more lines are too long

View File

@ -1,61 +1,62 @@
.hll { background-color: #ffffcc }
.c { color: #408090; font-style: italic } /* Comment */
.err { border: 1px solid #FF0000 } /* Error */
.k { color: #007020; font-weight: bold } /* Keyword */
.o { color: #666666 } /* Operator */
.cm { color: #408090; font-style: italic } /* Comment.Multiline */
.cp { color: #007020 } /* Comment.Preproc */
.c1 { color: #408090; font-style: italic } /* Comment.Single */
.cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
.gd { color: #A00000 } /* Generic.Deleted */
.ge { font-style: italic } /* Generic.Emph */
.gr { color: #FF0000 } /* Generic.Error */
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
.gi { color: #00A000 } /* Generic.Inserted */
.go { color: #303030 } /* Generic.Output */
.gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
.gs { font-weight: bold } /* Generic.Strong */
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.gt { color: #0040D0 } /* Generic.Traceback */
.kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
.kp { color: #007020 } /* Keyword.Pseudo */
.kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
.kt { color: #902000 } /* Keyword.Type */
.m { color: #208050 } /* Literal.Number */
.s { color: #4070a0 } /* Literal.String */
.na { color: #4070a0 } /* Name.Attribute */
.nb { color: #007020 } /* Name.Builtin */
.nc { color: #0e84b5; font-weight: bold } /* Name.Class */
.no { color: #60add5 } /* Name.Constant */
.nd { color: #555555; font-weight: bold } /* Name.Decorator */
.ni { color: #d55537; font-weight: bold } /* Name.Entity */
.ne { color: #007020 } /* Name.Exception */
.nf { color: #06287e } /* Name.Function */
.nl { color: #002070; font-weight: bold } /* Name.Label */
.nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
.nt { color: #062873; font-weight: bold } /* Name.Tag */
.nv { color: #bb60d5 } /* Name.Variable */
.ow { color: #007020; font-weight: bold } /* Operator.Word */
.w { color: #bbbbbb } /* Text.Whitespace */
.mf { color: #208050 } /* Literal.Number.Float */
.mh { color: #208050 } /* Literal.Number.Hex */
.mi { color: #208050 } /* Literal.Number.Integer */
.mo { color: #208050 } /* Literal.Number.Oct */
.sb { color: #4070a0 } /* Literal.String.Backtick */
.sc { color: #4070a0 } /* Literal.String.Char */
.sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
.s2 { color: #4070a0 } /* Literal.String.Double */
.se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
.sh { color: #4070a0 } /* Literal.String.Heredoc */
.si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
.sx { color: #c65d09 } /* Literal.String.Other */
.sr { color: #235388 } /* Literal.String.Regex */
.s1 { color: #4070a0 } /* Literal.String.Single */
.ss { color: #517918 } /* Literal.String.Symbol */
.bp { color: #007020 } /* Name.Builtin.Pseudo */
.vc { color: #bb60d5 } /* Name.Variable.Class */
.vg { color: #bb60d5 } /* Name.Variable.Global */
.vi { color: #bb60d5 } /* Name.Variable.Instance */
.il { color: #208050 } /* Literal.Number.Integer.Long */
.highlight .hll { background-color: #ffffcc }
.highlight { background: #eeffcc; }
.highlight .c { color: #408090; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #007020 } /* Comment.Preproc */
.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #303030 } /* Generic.Output */
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #902000 } /* Keyword.Type */
.highlight .m { color: #208050 } /* Literal.Number */
.highlight .s { color: #4070a0 } /* Literal.String */
.highlight .na { color: #4070a0 } /* Name.Attribute */
.highlight .nb { color: #007020 } /* Name.Builtin */
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
.highlight .no { color: #60add5 } /* Name.Constant */
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #007020 } /* Name.Exception */
.highlight .nf { color: #06287e } /* Name.Function */
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #bb60d5 } /* Name.Variable */
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #208050 } /* Literal.Number.Float */
.highlight .mh { color: #208050 } /* Literal.Number.Hex */
.highlight .mi { color: #208050 } /* Literal.Number.Integer */
.highlight .mo { color: #208050 } /* Literal.Number.Oct */
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
.highlight .sr { color: #235388 } /* Literal.String.Regex */
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */

View File

@ -1,3 +1,14 @@
/*
* searchtools.js
* ~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilties for the full-text search.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
@ -20,7 +31,7 @@ jQuery.makeSearchSummary = function(text, keywords, hlwords) {
((start + 240 - text.length) ? '...' : '');
var rv = $('<div class="context"></div>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlight');
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
@ -226,9 +237,11 @@ var Search = {
}
},
/**
* Sets the index
*/
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null, success: null,
dataType: "script", cache: true});
},
setIndex : function(index) {
var q;
this._index = index;
@ -287,8 +300,13 @@ var Search = {
},
query : function(query) {
// stem the searchterms and add them to the
// correct list
var stopwords = ['and', 'then', 'into', 'it', 'as', 'are', 'in',
'if', 'for', 'no', 'there', 'their', 'was', 'is',
'be', 'to', 'that', 'but', 'they', 'not', 'such',
'with', 'by', 'a', 'on', 'these', 'of', 'will',
'this', 'near', 'the', 'or', 'at'];
// stem the searchterms and add them to the correct list
var stemmer = new PorterStemmer();
var searchterms = [];
var excluded = [];
@ -296,6 +314,11 @@ var Search = {
var tmp = query.split(/\s+/);
var object = (tmp.length == 1) ? tmp[0].toLowerCase() : null;
for (var i = 0; i < tmp.length; i++) {
if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) ||
tmp[i] == "") {
// skip this "word"
continue;
}
// stem the word
var word = stemmer.stemWord(tmp[i]).toLowerCase();
// select the correct list
@ -313,39 +336,42 @@ var Search = {
};
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
console.debug('SEARCH: searching for:');
console.info('required: ', searchterms);
console.info('excluded: ', excluded);
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// prepare search
var filenames = this._index.filenames;
var titles = this._index.titles;
var terms = this._index.terms;
var descrefs = this._index.descrefs;
var modules = this._index.modules;
var desctypes = this._index.desctypes;
var objects = this._index.objects;
var objtypes = this._index.objtypes;
var objnames = this._index.objnames;
var fileMap = {};
var files = null;
// different result priorities
var importantResults = [];
var objectResults = [];
var regularResults = [];
var unimportantResults = [];
$('#search-progress').empty();
// lookup as object
if (object != null) {
for (var module in modules) {
if (module.indexOf(object) > -1) {
fn = modules[module];
descr = _('module, in ') + titles[fn];
objectResults.push([filenames[fn], module, '#module-'+module, descr]);
}
}
for (var prefix in descrefs) {
for (var name in descrefs[prefix]) {
for (var prefix in objects) {
for (var name in objects[prefix]) {
var fullname = (prefix ? prefix + '.' : '') + name;
if (fullname.toLowerCase().indexOf(object) > -1) {
match = descrefs[prefix][name];
descr = desctypes[match[1]] + _(', in ') + titles[match[0]];
objectResults.push([filenames[match[0]], fullname, '#'+fullname, descr]);
match = objects[prefix][name];
descr = objnames[match[1]] + _(', in ') + titles[match[0]];
// XXX the generated anchors are not generally correct
// XXX there may be custom prefixes
result = [filenames[match[0]], fullname, '#'+fullname, descr];
switch (match[2]) {
case 1: objectResults.push(result); break;
case 0: importantResults.push(result); break;
case 2: unimportantResults.push(result); break;
}
}
}
}
@ -356,6 +382,14 @@ var Search = {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
importantResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
unimportantResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
// perform the search on the required terms
for (var i = 0; i < searchterms.length; i++) {
@ -411,8 +445,9 @@ var Search = {
return (left > right) ? -1 : ((left < right) ? 1 : 0);
});
// combine both
var results = regularResults.concat(objectResults);
// combine all results
var results = unimportantResults.concat(regularResults)
.concat(objectResults).concat(importantResults);
// print the results
var resultCount = results.length;
@ -421,10 +456,23 @@ var Search = {
if (results.length) {
var item = results.pop();
var listItem = $('<li style="display:none"></li>');
listItem.append($('<a/>').attr(
'href',
item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
highlightstring + item[2]).html(item[1]));
if (DOCUMENTATION_OPTIONS.FILE_SUFFIX == '') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
listItem.append($('<a/>').attr('href',
DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
highlightstring + item[2]).html(item[1]));
} else {
// normal html builders
listItem.append($('<a/>').attr('href',
item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
highlightstring + item[2]).html(item[1]));
}
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
@ -432,9 +480,12 @@ var Search = {
displayNextItem();
});
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
$.get('_sources/' + item[0] + '.txt', function(data) {
listItem.append($.makeSearchSummary(data, searchterms, hlterms));
Search.output.append(listItem);
$.get(DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' +
item[0] + '.txt', function(data) {
if (data != '') {
listItem.append($.makeSearchSummary(data, searchterms, hlterms));
Search.output.append(listItem);
}
listItem.slideDown(5, function() {
displayNextItem();
});

View File

@ -0,0 +1,148 @@
/*
* sidebar.js
* ~~~~~~~~~~
*
* This script makes the Sphinx sidebar collapsible.
*
* .sphinxsidebar contains .sphinxsidebarwrapper. This script adds
* in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton
* used to collapse and expand the sidebar.
*
* When the sidebar is collapsed the .sphinxsidebarwrapper is hidden
* and the width of the sidebar and the margin-left of the document
* are decreased. When the sidebar is expanded the opposite happens.
* This script saves a per-browser/per-session cookie used to
* remember the position of the sidebar among the pages.
* Once the browser is closed the cookie is deleted and the position
* reset to the default (expanded).
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
$(function() {
// global elements used by the functions.
// the 'sidebarbutton' element is defined as global after its
// creation, in the add_sidebar_button function
var bodywrapper = $('.bodywrapper');
var sidebar = $('.sphinxsidebar');
var sidebarwrapper = $('.sphinxsidebarwrapper');
// original margin-left of the bodywrapper and width of the sidebar
// with the sidebar expanded
var bw_margin_expanded = bodywrapper.css('margin-left');
var ssb_width_expanded = sidebar.width();
// margin-left of the bodywrapper and width of the sidebar
// with the sidebar collapsed
var bw_margin_collapsed = '.8em';
var ssb_width_collapsed = '.8em';
// colors used by the current theme
var dark_color = $('.related').css('background-color');
var light_color = $('.document').css('background-color');
function sidebar_is_collapsed() {
return sidebarwrapper.is(':not(:visible)');
}
function toggle_sidebar() {
if (sidebar_is_collapsed())
expand_sidebar();
else
collapse_sidebar();
}
function collapse_sidebar() {
sidebarwrapper.hide();
sidebar.css('width', ssb_width_collapsed);
bodywrapper.css('margin-left', bw_margin_collapsed);
sidebarbutton.css({
'margin-left': '0',
'height': bodywrapper.height()
});
sidebarbutton.find('span').text('»');
sidebarbutton.attr('title', _('Expand sidebar'));
document.cookie = 'sidebar=collapsed';
}
function expand_sidebar() {
bodywrapper.css('margin-left', bw_margin_expanded);
sidebar.css('width', ssb_width_expanded);
sidebarwrapper.show();
sidebarbutton.css({
'margin-left': ssb_width_expanded-12,
'height': bodywrapper.height()
});
sidebarbutton.find('span').text('«');
sidebarbutton.attr('title', _('Collapse sidebar'));
document.cookie = 'sidebar=expanded';
}
function add_sidebar_button() {
sidebarwrapper.css({
'float': 'left',
'margin-right': '0',
'width': ssb_width_expanded - 28
});
// create the button
sidebar.append(
'<div id="sidebarbutton"><span>&laquo;</span></div>'
);
var sidebarbutton = $('#sidebarbutton');
light_color = sidebarbutton.css('background-color');
// find the height of the viewport to center the '<<' in the page
var viewport_height;
if (window.innerHeight)
viewport_height = window.innerHeight;
else
viewport_height = $(window).height();
sidebarbutton.find('span').css({
'display': 'block',
'margin-top': (viewport_height - sidebar.position().top - 20) / 2
});
sidebarbutton.click(toggle_sidebar);
sidebarbutton.attr('title', _('Collapse sidebar'));
sidebarbutton.css({
'color': '#FFFFFF',
'border-left': '1px solid ' + dark_color,
'font-size': '1.2em',
'cursor': 'pointer',
'height': bodywrapper.height(),
'padding-top': '1px',
'margin-left': ssb_width_expanded - 12
});
sidebarbutton.hover(
function () {
$(this).css('background-color', dark_color);
},
function () {
$(this).css('background-color', light_color);
}
);
}
function set_position_from_cookie() {
if (!document.cookie)
return;
var items = document.cookie.split(';');
for(var k=0; k<items.length; k++) {
var key_val = items[k].split('=');
var key = key_val[0];
if (key == 'sidebar') {
var value = key_val[1];
if ((value == 'collapsed') && (!sidebar_is_collapsed()))
collapse_sidebar();
else if ((value == 'expanded') && (sidebar_is_collapsed()))
expand_sidebar();
}
}
}
add_sidebar_button();
var sidebarbutton = $('#sidebarbutton');
set_position_from_cookie();
});

View File

@ -0,0 +1,16 @@
(function(){var j=this,n=j._,i=function(a){this._wrapped=a},m=typeof StopIteration!=="undefined"?StopIteration:"__break__",b=j._=function(a){return new i(a)};if(typeof exports!=="undefined")exports._=b;var k=Array.prototype.slice,o=Array.prototype.unshift,p=Object.prototype.toString,q=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;b.VERSION="0.5.5";b.each=function(a,c,d){try{if(a.forEach)a.forEach(c,d);else if(b.isArray(a)||b.isArguments(a))for(var e=0,f=a.length;e<f;e++)c.call(d,
a[e],e,a);else{var g=b.keys(a);f=g.length;for(e=0;e<f;e++)c.call(d,a[g[e]],g[e],a)}}catch(h){if(h!=m)throw h;}return a};b.map=function(a,c,d){if(a&&b.isFunction(a.map))return a.map(c,d);var e=[];b.each(a,function(f,g,h){e.push(c.call(d,f,g,h))});return e};b.reduce=function(a,c,d,e){if(a&&b.isFunction(a.reduce))return a.reduce(b.bind(d,e),c);b.each(a,function(f,g,h){c=d.call(e,c,f,g,h)});return c};b.reduceRight=function(a,c,d,e){if(a&&b.isFunction(a.reduceRight))return a.reduceRight(b.bind(d,e),c);
var f=b.clone(b.toArray(a)).reverse();b.each(f,function(g,h){c=d.call(e,c,g,h,a)});return c};b.detect=function(a,c,d){var e;b.each(a,function(f,g,h){if(c.call(d,f,g,h)){e=f;b.breakLoop()}});return e};b.select=function(a,c,d){if(a&&b.isFunction(a.filter))return a.filter(c,d);var e=[];b.each(a,function(f,g,h){c.call(d,f,g,h)&&e.push(f)});return e};b.reject=function(a,c,d){var e=[];b.each(a,function(f,g,h){!c.call(d,f,g,h)&&e.push(f)});return e};b.all=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.every))return a.every(c,
d);var e=true;b.each(a,function(f,g,h){(e=e&&c.call(d,f,g,h))||b.breakLoop()});return e};b.any=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.some))return a.some(c,d);var e=false;b.each(a,function(f,g,h){if(e=c.call(d,f,g,h))b.breakLoop()});return e};b.include=function(a,c){if(b.isArray(a))return b.indexOf(a,c)!=-1;var d=false;b.each(a,function(e){if(d=e===c)b.breakLoop()});return d};b.invoke=function(a,c){var d=b.rest(arguments,2);return b.map(a,function(e){return(c?e[c]:e).apply(e,d)})};b.pluck=
function(a,c){return b.map(a,function(d){return d[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);var e={computed:-Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g>=e.computed&&(e={value:f,computed:g})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g<e.computed&&(e={value:f,computed:g})});return e.value};b.sortBy=function(a,c,d){return b.pluck(b.map(a,
function(e,f,g){return{value:e,criteria:c.call(d,e,f,g)}}).sort(function(e,f){e=e.criteria;f=f.criteria;return e<f?-1:e>f?1:0}),"value")};b.sortedIndex=function(a,c,d){d=d||b.identity;for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?(e=g+1):(f=g)}return e};b.toArray=function(a){if(!a)return[];if(a.toArray)return a.toArray();if(b.isArray(a))return a;if(b.isArguments(a))return k.call(a);return b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=function(a,c,d){return c&&!d?k.call(a,
0,c):a[0]};b.rest=function(a,c,d){return k.call(a,b.isUndefined(c)||d?1:c)};b.last=function(a){return a[a.length-1]};b.compact=function(a){return b.select(a,function(c){return!!c})};b.flatten=function(a){return b.reduce(a,[],function(c,d){if(b.isArray(d))return c.concat(b.flatten(d));c.push(d);return c})};b.without=function(a){var c=b.rest(arguments);return b.select(a,function(d){return!b.include(c,d)})};b.uniq=function(a,c){return b.reduce(a,[],function(d,e,f){if(0==f||(c===true?b.last(d)!=e:!b.include(d,
e)))d.push(e);return d})};b.intersect=function(a){var c=b.rest(arguments);return b.select(b.uniq(a),function(d){return b.all(c,function(e){return b.indexOf(e,d)>=0})})};b.zip=function(){for(var a=b.toArray(arguments),c=b.max(b.pluck(a,"length")),d=new Array(c),e=0;e<c;e++)d[e]=b.pluck(a,String(e));return d};b.indexOf=function(a,c){if(a.indexOf)return a.indexOf(c);for(var d=0,e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,c){if(a.lastIndexOf)return a.lastIndexOf(c);for(var d=
a.length;d--;)if(a[d]===c)return d;return-1};b.range=function(a,c,d){var e=b.toArray(arguments),f=e.length<=1;a=f?0:e[0];c=f?e[0]:e[1];d=e[2]||1;e=Math.ceil((c-a)/d);if(e<=0)return[];e=new Array(e);f=a;for(var g=0;1;f+=d){if((d>0?f-c:c-f)>=0)return e;e[g++]=f}};b.bind=function(a,c){var d=b.rest(arguments,2);return function(){return a.apply(c||j,d.concat(b.toArray(arguments)))}};b.bindAll=function(a){var c=b.rest(arguments);if(c.length==0)c=b.functions(a);b.each(c,function(d){a[d]=b.bind(a[d],a)});
return a};b.delay=function(a,c){var d=b.rest(arguments,2);return setTimeout(function(){return a.apply(a,d)},c)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(b.rest(arguments)))};b.wrap=function(a,c){return function(){var d=[a].concat(b.toArray(arguments));return c.apply(c,d)}};b.compose=function(){var a=b.toArray(arguments);return function(){for(var c=b.toArray(arguments),d=a.length-1;d>=0;d--)c=[a[d].apply(this,c)];return c[0]}};b.keys=function(a){if(b.isArray(a))return b.range(0,a.length);
var c=[];for(var d in a)q.call(a,d)&&c.push(d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=function(a){return b.select(b.keys(a),function(c){return b.isFunction(a[c])}).sort()};b.extend=function(a,c){for(var d in c)a[d]=c[d];return a};b.clone=function(a){if(b.isArray(a))return a.slice(0);return b.extend({},a)};b.tap=function(a,c){c(a);return a};b.isEqual=function(a,c){if(a===c)return true;var d=typeof a;if(d!=typeof c)return false;if(a==c)return true;if(!a&&c||a&&!c)return false;
if(a.isEqual)return a.isEqual(c);if(b.isDate(a)&&b.isDate(c))return a.getTime()===c.getTime();if(b.isNaN(a)&&b.isNaN(c))return true;if(b.isRegExp(a)&&b.isRegExp(c))return a.source===c.source&&a.global===c.global&&a.ignoreCase===c.ignoreCase&&a.multiline===c.multiline;if(d!=="object")return false;if(a.length&&a.length!==c.length)return false;d=b.keys(a);var e=b.keys(c);if(d.length!=e.length)return false;for(var f in a)if(!b.isEqual(a[f],c[f]))return false;return true};b.isEmpty=function(a){return b.keys(a).length==
0};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=function(a){return!!(a&&a.concat&&a.unshift)};b.isArguments=function(a){return a&&b.isNumber(a.length)&&!b.isArray(a)&&!r.call(a,"length")};b.isFunction=function(a){return!!(a&&a.constructor&&a.call&&a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};b.isNumber=function(a){return p.call(a)==="[object Number]"};b.isDate=function(a){return!!(a&&a.getTimezoneOffset&&a.setUTCFullYear)};b.isRegExp=function(a){return!!(a&&
a.test&&a.exec&&(a.ignoreCase||a.ignoreCase===false))};b.isNaN=function(a){return b.isNumber(a)&&isNaN(a)};b.isNull=function(a){return a===null};b.isUndefined=function(a){return typeof a=="undefined"};b.noConflict=function(){j._=n;return this};b.identity=function(a){return a};b.breakLoop=function(){throw m;};var s=0;b.uniqueId=function(a){var c=s++;return a?a+c:c};b.template=function(a,c){a=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g,
" ").replace(/'(?=[^%]*%>)/g,"\t").split("'").join("\\'").split("\t").join("'").replace(/<%=(.+?)%>/g,"',$1,'").split("<%").join("');").split("%>").join("p.push('")+"');}return p.join('');");return c?a(c):a};b.forEach=b.each;b.foldl=b.inject=b.reduce;b.foldr=b.reduceRight;b.filter=b.select;b.every=b.all;b.some=b.any;b.head=b.first;b.tail=b.rest;b.methods=b.functions;var l=function(a,c){return c?b(a).chain():a};b.each(b.functions(b),function(a){var c=b[a];i.prototype[a]=function(){var d=b.toArray(arguments);
o.call(d,this._wrapped);return l(c.apply(b,d),this._chain)}});b.each(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){c.apply(this._wrapped,arguments);return l(this._wrapped,this._chain)}});b.each(["concat","join","slice"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){return l(c.apply(this._wrapped,arguments),this._chain)}});i.prototype.chain=function(){this._chain=true;return this};i.prototype.value=function(){return this._wrapped}})();

View File

@ -1,3 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@ -5,21 +7,22 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Index &mdash; TFTPy v0.5.1 documentation</title>
<title>Index &mdash; TFTPy v0.6.0 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '#',
VERSION: '0.5.1',
COLLAPSE_MODINDEX: false,
URL_ROOT: '',
VERSION: '0.6.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="TFTPy v0.5.1 documentation" href="index.html" />
<link rel="top" title="TFTPy v0.6.0 documentation" href="index.html" />
</head>
<body>
<div class="related">
@ -29,9 +32,9 @@
<a href="#" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
accesskey="M">modules</a> |</li>
<li><a href="index.html">TFTPy v0.5.1 documentation</a> &raquo;</li>
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">TFTPy v0.6.0 documentation</a> &raquo;</li>
</ul>
</div>
@ -43,176 +46,194 @@
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
<a href="#A"><strong>A</strong></a> | <a href="#C"><strong>C</strong></a> | <a href="#D"><strong>D</strong></a> | <a href="#E"><strong>E</strong></a> | <a href="#G"><strong>G</strong></a> | <a href="#H"><strong>H</strong></a> | <a href="#L"><strong>L</strong></a> | <a href="#M"><strong>M</strong></a> | <a href="#P"><strong>P</strong></a> | <a href="#R"><strong>R</strong></a> | <a href="#S"><strong>S</strong></a> | <a href="#T"><strong>T</strong></a> | <a href="#U"><strong>U</strong></a>
<hr />
</div>
<h2 id="A">A</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpStates.TftpMetrics.add_dup">add_dup() (tftpy.TftpStates.TftpMetrics method)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpContexts.TftpMetrics.add_dup">add_dup() (tftpy.TftpContexts.TftpMetrics method)</a></dt>
</dl></td>
</tr></table>
<h2 id="C">C</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpStates.TftpContext.checkTimeout">checkTimeout() (tftpy.TftpStates.TftpContext method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpContext.cycle">cycle() (tftpy.TftpStates.TftpContext method)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpContexts.TftpContext.checkTimeout">checkTimeout() (tftpy.TftpContexts.TftpContext method)</a></dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpContexts.TftpContext.cycle">cycle() (tftpy.TftpContexts.TftpContext method)</a></dt>
</dl></td>
</tr></table>
<h2 id="D">D</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacket.decode">decode() (tftpy.TftpPacketTypes.TftpPacket method)</a></dt>
<dd><dl>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketDAT.decode">(tftpy.TftpPacketTypes.TftpPacketDAT method)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketERR.decode">(tftpy.TftpPacketTypes.TftpPacketERR method)</a></dt>
</dl></dd></dl></td><td width="33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options">decode_options() (tftpy.TftpPacketTypes.TftpPacketWithOptions method)</a></dt>
<dt><a href="index.html#tftpy.TftpClient.TftpClient.download">download() (tftpy.TftpClient.TftpClient method)</a></dt>
</dl></td></tr></table>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacket.decode">decode() (tftpy.TftpPacketTypes.TftpPacket method)</a></dt>
<dd><dl>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketDAT.decode">(tftpy.TftpPacketTypes.TftpPacketDAT method)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketERR.decode">(tftpy.TftpPacketTypes.TftpPacketERR method)</a></dt>
</dl></dd>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options">decode_options() (tftpy.TftpPacketTypes.TftpPacketWithOptions method)</a></dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpClient.TftpClient.download">download() (tftpy.TftpClient.TftpClient method)</a></dt>
</dl></td>
</tr></table>
<h2 id="E">E</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacket.encode">encode() (tftpy.TftpPacketTypes.TftpPacket method)</a></dt>
<dd><dl>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketDAT.encode">(tftpy.TftpPacketTypes.TftpPacketDAT method)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketERR.encode">(tftpy.TftpPacketTypes.TftpPacketERR method)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketInitial.encode">(tftpy.TftpPacketTypes.TftpPacketInitial method)</a></dt>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacket.encode">encode() (tftpy.TftpPacketTypes.TftpPacket method)</a></dt>
<dd><dl>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketDAT.encode">(tftpy.TftpPacketTypes.TftpPacketDAT method)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketERR.encode">(tftpy.TftpPacketTypes.TftpPacketERR method)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketInitial.encode">(tftpy.TftpPacketTypes.TftpPacketInitial method)</a></dt>
</dl></dd>
<dt><a href="index.html#tftpy.TftpStates.TftpContext.end">end() (tftpy.TftpStates.TftpContext method)</a></dt>
<dd><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpContextClientDownload.end">(tftpy.TftpStates.TftpContextClientDownload method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpContextClientUpload.end">(tftpy.TftpStates.TftpContextClientUpload method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpContextServer.end">(tftpy.TftpStates.TftpContextServer method)</a></dt>
</dl></dd></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpContexts.TftpContext.end">end() (tftpy.TftpContexts.TftpContext method)</a></dt>
<dd><dl>
<dt><a href="index.html#tftpy.TftpContexts.TftpContextClientDownload.end">(tftpy.TftpContexts.TftpContextClientDownload method)</a></dt>
<dt><a href="index.html#tftpy.TftpContexts.TftpContextClientUpload.end">(tftpy.TftpContexts.TftpContextClientUpload method)</a></dt>
<dt><a href="index.html#tftpy.TftpContexts.TftpContextServer.end">(tftpy.TftpContexts.TftpContextServer method)</a></dt>
</dl></dd>
</dl></td>
</tr></table>
<h2 id="G">G</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpStates.TftpContext.gethost">gethost() (tftpy.TftpStates.TftpContext method)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpContexts.TftpContext.getBlocksize">getBlocksize() (tftpy.TftpContexts.TftpContext method)</a></dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpContexts.TftpContext.gethost">gethost() (tftpy.TftpContexts.TftpContext method)</a></dt>
</dl></td>
</tr></table>
<h2 id="H">H</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpStates.TftpState.handle">handle() (tftpy.TftpStates.TftpState method)</a></dt>
<dd><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpStateExpectACK.handle">(tftpy.TftpStates.TftpStateExpectACK method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateExpectDAT.handle">(tftpy.TftpStates.TftpStateExpectDAT method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateSentRRQ.handle">(tftpy.TftpStates.TftpStateSentRRQ method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateSentWRQ.handle">(tftpy.TftpStates.TftpStateSentWRQ method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerRecvRRQ.handle">(tftpy.TftpStates.TftpStateServerRecvRRQ method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerRecvWRQ.handle">(tftpy.TftpStates.TftpStateServerRecvWRQ method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerStart.handle">(tftpy.TftpStates.TftpStateServerStart method)</a></dt>
</dl></dd></dl></td><td width="33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpState.handleDat">handleDat() (tftpy.TftpStates.TftpState method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpState.handleOACK">handleOACK() (tftpy.TftpStates.TftpState method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpContext.host">host (tftpy.TftpStates.TftpContext attribute)</a></dt>
</dl></td></tr></table>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpState.handle">handle() (tftpy.TftpStates.TftpState method)</a></dt>
<dd><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpStateExpectACK.handle">(tftpy.TftpStates.TftpStateExpectACK method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateExpectDAT.handle">(tftpy.TftpStates.TftpStateExpectDAT method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateSentRRQ.handle">(tftpy.TftpStates.TftpStateSentRRQ method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateSentWRQ.handle">(tftpy.TftpStates.TftpStateSentWRQ method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerRecvRRQ.handle">(tftpy.TftpStates.TftpStateServerRecvRRQ method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerRecvWRQ.handle">(tftpy.TftpStates.TftpStateServerRecvWRQ method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerStart.handle">(tftpy.TftpStates.TftpStateServerStart method)</a></dt>
</dl></dd>
<dt><a href="index.html#tftpy.TftpStates.TftpState.handleDat">handleDat() (tftpy.TftpStates.TftpState method)</a></dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpState.handleOACK">handleOACK() (tftpy.TftpStates.TftpState method)</a></dt>
<dt><a href="index.html#tftpy.TftpContexts.TftpContext.host">host (tftpy.TftpContexts.TftpContext attribute)</a></dt>
</dl></td>
</tr></table>
<h2 id="L">L</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpServer.TftpServer.listen">listen() (tftpy.TftpServer.TftpServer method)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpServer.TftpServer.listen">listen() (tftpy.TftpServer.TftpServer method)</a></dt>
</dl></td>
</tr></table>
<h2 id="M">M</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketOACK.match_options">match_options() (tftpy.TftpPacketTypes.TftpPacketOACK method)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketOACK.match_options">match_options() (tftpy.TftpPacketTypes.TftpPacketOACK method)</a></dt>
</dl></td>
</tr></table>
<h2 id="P">P</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpPacketFactory.TftpPacketFactory.parse">parse() (tftpy.TftpPacketFactory.TftpPacketFactory method)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpPacketFactory.TftpPacketFactory.parse">parse() (tftpy.TftpPacketFactory.TftpPacketFactory method)</a></dt>
</dl></td>
</tr></table>
<h2 id="R">R</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpStates.TftpState.returnSupportedOptions">returnSupportedOptions() (tftpy.TftpStates.TftpState method)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpState.resendLast">resendLast() (tftpy.TftpStates.TftpState method)</a></dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpState.returnSupportedOptions">returnSupportedOptions() (tftpy.TftpStates.TftpState method)</a></dt>
</dl></td>
</tr></table>
<h2 id="S">S</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpStates.TftpState.sendACK">sendACK() (tftpy.TftpStates.TftpState method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpState.sendDAT">sendDAT() (tftpy.TftpStates.TftpState method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpState.sendError">sendError() (tftpy.TftpStates.TftpState method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpState.sendOACK">sendOACK() (tftpy.TftpStates.TftpState method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpState.serverInitial">serverInitial() (tftpy.TftpStates.TftpState method)</a></dt></dl></td><td width="33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpContext.sethost">sethost() (tftpy.TftpStates.TftpContext method)</a></dt>
<dt><a href="index.html#tftpy.TftpShared.setLogLevel">setLogLevel() (in module tftpy.TftpShared)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpContextClientDownload.start">start() (tftpy.TftpStates.TftpContextClientDownload method)</a></dt>
<dd><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpContextServer.start">(tftpy.TftpStates.TftpContextServer method)</a></dt>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpState.sendACK">sendACK() (tftpy.TftpStates.TftpState method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpState.sendDAT">sendDAT() (tftpy.TftpStates.TftpState method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpState.sendError">sendError() (tftpy.TftpStates.TftpState method)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpState.sendOACK">sendOACK() (tftpy.TftpStates.TftpState method)</a></dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpStates.TftpState.serverInitial">serverInitial() (tftpy.TftpStates.TftpState method)</a></dt>
<dt><a href="index.html#tftpy.TftpContexts.TftpContext.sethost">sethost() (tftpy.TftpContexts.TftpContext method)</a></dt>
<dt><a href="index.html#tftpy.TftpShared.setLogLevel">setLogLevel() (in module tftpy.TftpShared)</a></dt>
<dt><a href="index.html#tftpy.TftpContexts.TftpContextClientDownload.start">start() (tftpy.TftpContexts.TftpContextClientDownload method)</a></dt>
<dd><dl>
<dt><a href="index.html#tftpy.TftpContexts.TftpContextServer.start">(tftpy.TftpContexts.TftpContextServer method)</a></dt>
</dl></dd>
</dl></td></tr></table>
</dl></td>
</tr></table>
<h2 id="T">T</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpShared.tftpassert">tftpassert() (in module tftpy.TftpShared)</a></dt>
<dt><a href="index.html#tftpy.TftpClient.TftpClient">TftpClient (class in tftpy.TftpClient)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpContext">TftpContext (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpContextClientDownload">TftpContextClientDownload (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpContextClientUpload">TftpContextClientUpload (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpContextServer">TftpContextServer (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpShared.TftpErrors">TftpErrors (class in tftpy.TftpShared)</a></dt>
<dt><a href="index.html#tftpy.TftpShared.TftpException">TftpException</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpMetrics">TftpMetrics (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacket">TftpPacket (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketACK">TftpPacketACK (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketDAT">TftpPacketDAT (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketERR">TftpPacketERR (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketFactory.TftpPacketFactory">TftpPacketFactory (class in tftpy.TftpPacketFactory)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketInitial">TftpPacketInitial (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketOACK">TftpPacketOACK (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketRRQ">TftpPacketRRQ (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketWithOptions">TftpPacketWithOptions (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketWRQ">TftpPacketWRQ (class in tftpy.TftpPacketTypes)</a></dt></dl></td><td width="33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpServer.TftpServer">TftpServer (class in tftpy.TftpServer)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpSession">TftpSession (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpState">TftpState (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateExpectACK">TftpStateExpectACK (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateExpectDAT">TftpStateExpectDAT (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateSentRRQ">TftpStateSentRRQ (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateSentWRQ">TftpStateSentWRQ (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerRecvRRQ">TftpStateServerRecvRRQ (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerRecvWRQ">TftpStateServerRecvWRQ (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerStart">TftpStateServerStart (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#module-tftpy">tftpy (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpClient">tftpy.TftpClient (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpPacketFactory">tftpy.TftpPacketFactory (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpPacketTypes">tftpy.TftpPacketTypes (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpServer">tftpy.TftpServer (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpShared">tftpy.TftpShared (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpStates">tftpy.TftpStates (module)</a></dt>
</dl></td></tr></table>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpShared.tftpassert">tftpassert() (in module tftpy.TftpShared)</a></dt>
<dt><a href="index.html#tftpy.TftpClient.TftpClient">TftpClient (class in tftpy.TftpClient)</a></dt>
<dt><a href="index.html#tftpy.TftpContexts.TftpContext">TftpContext (class in tftpy.TftpContexts)</a></dt>
<dt><a href="index.html#tftpy.TftpContexts.TftpContextClientDownload">TftpContextClientDownload (class in tftpy.TftpContexts)</a></dt>
<dt><a href="index.html#tftpy.TftpContexts.TftpContextClientUpload">TftpContextClientUpload (class in tftpy.TftpContexts)</a></dt>
<dt><a href="index.html#tftpy.TftpContexts.TftpContextServer">TftpContextServer (class in tftpy.TftpContexts)</a></dt>
<dt><a href="index.html#tftpy.TftpShared.TftpErrors">TftpErrors (class in tftpy.TftpShared)</a></dt>
<dt><a href="index.html#tftpy.TftpShared.TftpException">TftpException</a></dt>
<dt><a href="index.html#tftpy.TftpContexts.TftpMetrics">TftpMetrics (class in tftpy.TftpContexts)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacket">TftpPacket (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketACK">TftpPacketACK (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketDAT">TftpPacketDAT (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketERR">TftpPacketERR (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketFactory.TftpPacketFactory">TftpPacketFactory (class in tftpy.TftpPacketFactory)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketInitial">TftpPacketInitial (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketOACK">TftpPacketOACK (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketRRQ">TftpPacketRRQ (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketWithOptions">TftpPacketWithOptions (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpPacketWRQ">TftpPacketWRQ (class in tftpy.TftpPacketTypes)</a></dt>
</dl></td>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpServer.TftpServer">TftpServer (class in tftpy.TftpServer)</a></dt>
<dt><a href="index.html#tftpy.TftpPacketTypes.TftpSession">TftpSession (class in tftpy.TftpPacketTypes)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpState">TftpState (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateExpectACK">TftpStateExpectACK (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateExpectDAT">TftpStateExpectDAT (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateSentRRQ">TftpStateSentRRQ (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateSentWRQ">TftpStateSentWRQ (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerRecvRRQ">TftpStateServerRecvRRQ (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerRecvWRQ">TftpStateServerRecvWRQ (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpStates.TftpStateServerStart">TftpStateServerStart (class in tftpy.TftpStates)</a></dt>
<dt><a href="index.html#tftpy.TftpShared.TftpTimeout">TftpTimeout</a></dt>
<dt><a href="index.html#module-tftpy">tftpy (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpClient">tftpy.TftpClient (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpContexts">tftpy.TftpContexts (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpPacketFactory">tftpy.TftpPacketFactory (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpPacketTypes">tftpy.TftpPacketTypes (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpServer">tftpy.TftpServer (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpShared">tftpy.TftpShared (module)</a></dt>
<dt><a href="index.html#module-tftpy.TftpStates">tftpy.TftpStates (module)</a></dt>
</dl></td>
</tr></table>
<h2 id="U">U</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="index.html#tftpy.TftpClient.TftpClient.upload">upload() (tftpy.TftpClient.TftpClient method)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%" valign="top"><dl>
<dt><a href="index.html#tftpy.TftpClient.TftpClient.upload">upload() (tftpy.TftpClient.TftpClient method)</a></dt>
</dl></td>
</tr></table>
@ -224,19 +245,19 @@
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@ -248,14 +269,14 @@
<a href="#" title="General Index"
>index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">TFTPy v0.5.1 documentation</a> &raquo;</li>
<li><a href="index.html">TFTPy v0.6.0 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, Michael P. Soulier.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.5.
&copy; Copyright 2010, Michael P. Soulier.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

View File

@ -1,3 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@ -5,21 +7,22 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>TFTPy &mdash; TFTPy v0.5.1 documentation</title>
<title>TFTPy &mdash; TFTPy v0.6.0 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '#',
VERSION: '0.5.1',
COLLAPSE_MODINDEX: false,
URL_ROOT: '',
VERSION: '0.6.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="TFTPy v0.5.1 documentation" href="#" />
<link rel="top" title="TFTPy v0.6.0 documentation" href="#" />
</head>
<body>
<div class="related">
@ -29,9 +32,9 @@
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
accesskey="M">modules</a> |</li>
<li><a href="#">TFTPy v0.5.1 documentation</a> &raquo;</li>
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="#">TFTPy v0.6.0 documentation</a> &raquo;</li>
</ul>
</div>
@ -43,12 +46,14 @@
<div class="section" id="tftpy">
<h1>TFTPy<a class="headerlink" href="#tftpy" title="Permalink to this headline"></a></h1>
<p>TFTPy is a pure python TFTP implementation.</p>
<div class="toctree-wrapper compound">
<ul class="simple">
</ul>
</div>
<ul class="simple">
<li><a class="reference external" href="genindex.html"><em>Index</em></a></li>
<li><a class="reference external" href="modindex.html"><em>Module Index</em></a></li>
<li><a class="reference external" href="search.html"><em>Search Page</em></a></li>
<li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
<li><a class="reference internal" href="py-modindex.html"><em>Module Index</em></a></li>
<li><a class="reference internal" href="search.html"><em>Search Page</em></a></li>
</ul>
</div>
<div class="section" id="requirements">
@ -95,7 +100,7 @@ and you should be able to import the <cite>tftpy</cite> module.</p>
<p>These modules are the ones that you will need to use directly to implement a
TFTP client or server.</p>
<div class="section" id="module-tftpy">
<h3>The <tt class="xref docutils literal"><span class="pre">tftpy</span></tt> Module<a class="headerlink" href="#module-tftpy" title="Permalink to this headline"></a></h3>
<span id="the-tftpy-module"></span><h3>The <a class="reference internal" href="#module-tftpy" title="tftpy"><tt class="xref py py-mod docutils literal"><span class="pre">tftpy</span></tt></a> Module<a class="headerlink" href="#module-tftpy" title="Permalink to this headline"></a></h3>
<p>This library implements the tftp protocol, based on rfc 1350.
<a class="reference external" href="http://www.faqs.org/rfcs/rfc1350.html">http://www.faqs.org/rfcs/rfc1350.html</a>
At the moment it implements only a client class, but will include a server,
@ -104,14 +109,14 @@ with support for variable block sizes.</p>
directly. The TftpClient and TftpServer classes can be reached through it.</p>
</div>
<div class="section" id="module-tftpy.TftpClient">
<h3>The <cite>TftpClient</cite> Module<a class="headerlink" href="#module-tftpy.TftpClient" title="Permalink to this headline"></a></h3>
<span id="the-tftpclient-module"></span><h3>The <cite>TftpClient</cite> Module<a class="headerlink" href="#module-tftpy.TftpClient" title="Permalink to this headline"></a></h3>
<p>This module implements the TFTP Client functionality. Instantiate an
instance of the client, and then use its upload or download method. Logging is
performed via a standard logging object set in TftpShared.</p>
<dl class="class">
<dt id="tftpy.TftpClient.TftpClient">
<em class="property">class </em><tt class="descclassname">tftpy.TftpClient.</tt><tt class="descname">TftpClient</tt><big>(</big><em>host</em>, <em>port</em>, <em>options={}</em><big>)</big><a class="headerlink" href="#tftpy.TftpClient.TftpClient" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpPacketTypes.TftpSession" class="reference internal" href="#tftpy.TftpPacketTypes.TftpSession"><tt class="xref docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpSession</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpPacketTypes.TftpSession" title="tftpy.TftpPacketTypes.TftpSession"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpSession</span></tt></a></p>
<p>This class is an implementation of a tftp client. Once instantiated, a
download can be initiated via the download() method, or an upload via the
upload() method.</p>
@ -139,6 +144,8 @@ each DAT packet sent 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
DAT packet to be ACKd by the server.</p>
<p>The input option is the full path to the file to upload, which can
optionally be &#8216;-&#8216; to read from stdin.</p>
<p>Note: If output is a hyphen then stdout is used.</p>
</dd></dl>
@ -146,7 +153,7 @@ DAT packet to be ACKd by the server.</p>
</div>
<div class="section" id="module-tftpy.TftpServer">
<h3>The <cite>TftpServer</cite> Module<a class="headerlink" href="#module-tftpy.TftpServer" title="Permalink to this headline"></a></h3>
<span id="the-tftpserver-module"></span><h3>The <cite>TftpServer</cite> Module<a class="headerlink" href="#module-tftpy.TftpServer" title="Permalink to this headline"></a></h3>
<p>This module implements the TFTP Server functionality. Instantiate an
instance of the server, and then run the listen() method to listen for client
requests. Logging is performed via a standard logging object set in
@ -154,7 +161,7 @@ TftpShared.</p>
<dl class="class">
<dt id="tftpy.TftpServer.TftpServer">
<em class="property">class </em><tt class="descclassname">tftpy.TftpServer.</tt><tt class="descname">TftpServer</tt><big>(</big><em>tftproot='/tftpboot'</em>, <em>dyn_file_func=None</em><big>)</big><a class="headerlink" href="#tftpy.TftpServer.TftpServer" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpPacketTypes.TftpSession" class="reference internal" href="#tftpy.TftpPacketTypes.TftpSession"><tt class="xref docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpSession</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpPacketTypes.TftpSession" title="tftpy.TftpPacketTypes.TftpSession"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpSession</span></tt></a></p>
<p>This class implements a tftp server object. Run the listen() method to
listen for client requests. It takes two optional arguments. tftproot is
the path to the tftproot directory to serve files from and/or write them
@ -164,9 +171,10 @@ content.</p>
<dl class="method">
<dt id="tftpy.TftpServer.TftpServer.listen">
<tt class="descname">listen</tt><big>(</big><em>listenip=''</em>, <em>listenport=69</em>, <em>timeout=5</em><big>)</big><a class="headerlink" href="#tftpy.TftpServer.TftpServer.listen" title="Permalink to this definition"></a></dt>
<dd>Start a server listening on the supplied interface and port. This
<dd><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.</dd></dl>
supply a different socket timeout value, if desired.</p>
</dd></dl>
</dd></dl>
@ -175,35 +183,36 @@ supply a different socket timeout value, if desired.</dd></dl>
<div class="section" id="back-end-modules">
<h2>Back-end Modules<a class="headerlink" href="#back-end-modules" title="Permalink to this headline"></a></h2>
<div class="section" id="module-tftpy.TftpPacketFactory">
<h3>The <cite>TftpPacketFactory</cite> Module<a class="headerlink" href="#module-tftpy.TftpPacketFactory" title="Permalink to this headline"></a></h3>
<span id="the-tftppacketfactory-module"></span><h3>The <cite>TftpPacketFactory</cite> Module<a class="headerlink" href="#module-tftpy.TftpPacketFactory" title="Permalink to this headline"></a></h3>
<p>This module implements the TftpPacketFactory class, which can take a binary
buffer, and return the appropriate TftpPacket object to represent it, via the
parse() method.</p>
<dl class="class">
<dt id="tftpy.TftpPacketFactory.TftpPacketFactory">
<em class="property">class </em><tt class="descclassname">tftpy.TftpPacketFactory.</tt><tt class="descname">TftpPacketFactory</tt><a class="headerlink" href="#tftpy.TftpPacketFactory.TftpPacketFactory" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref docutils literal"><span class="pre">object</span></tt></p>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<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>
<dl class="method">
<dt id="tftpy.TftpPacketFactory.TftpPacketFactory.parse">
<tt class="descname">parse</tt><big>(</big><em>buffer</em><big>)</big><a class="headerlink" href="#tftpy.TftpPacketFactory.TftpPacketFactory.parse" title="Permalink to this definition"></a></dt>
<dd>This method is used to parse an existing datagram into its
<dd><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.</dd></dl>
the network.</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-tftpy.TftpPacketTypes">
<h3>The <cite>TftpPacketTypes</cite> Module<a class="headerlink" href="#module-tftpy.TftpPacketTypes" title="Permalink to this headline"></a></h3>
<span id="the-tftppackettypes-module"></span><h3>The <cite>TftpPacketTypes</cite> Module<a class="headerlink" href="#module-tftpy.TftpPacketTypes" title="Permalink to this headline"></a></h3>
<p>This module implements the packet types of TFTP itself, and the
corresponding encode and decode methods for them.</p>
<dl class="class">
<dt id="tftpy.TftpPacketTypes.TftpPacket">
<em class="property">class </em><tt class="descclassname">tftpy.TftpPacketTypes.</tt><tt class="descname">TftpPacket</tt><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacket" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref docutils literal"><span class="pre">object</span></tt></p>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<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>
@ -232,7 +241,7 @@ order suitable for sending over the wire.</p>
<dl class="class">
<dt id="tftpy.TftpPacketTypes.TftpPacketACK">
<em class="property">class </em><tt class="descclassname">tftpy.TftpPacketTypes.</tt><tt class="descname">TftpPacketACK</tt><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketACK" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpPacketTypes.TftpPacket" class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacket"><tt class="xref docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacket</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacket" title="tftpy.TftpPacketTypes.TftpPacket"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacket</span></tt></a></p>
<div class="highlight-python"><pre> 2 bytes 2 bytes
-------------------
ACK | 04 | Block # |
@ -243,7 +252,7 @@ ACK | 04 | Block # |
<dl class="class">
<dt id="tftpy.TftpPacketTypes.TftpPacketDAT">
<em class="property">class </em><tt class="descclassname">tftpy.TftpPacketTypes.</tt><tt class="descname">TftpPacketDAT</tt><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketDAT" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpPacketTypes.TftpPacket" class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacket"><tt class="xref docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacket</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacket" title="tftpy.TftpPacketTypes.TftpPacket"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacket</span></tt></a></p>
<div class="highlight-python"><pre> 2 bytes 2 bytes n bytes
---------------------------------
DATA | 03 | Block # | Data |
@ -252,21 +261,23 @@ DATA | 03 | Block # | Data |
<dl class="method">
<dt id="tftpy.TftpPacketTypes.TftpPacketDAT.decode">
<tt class="descname">decode</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketDAT.decode" title="Permalink to this definition"></a></dt>
<dd>Decode self.buffer into instance variables. It returns self for
easy method chaining.</dd></dl>
<dd><p>Decode self.buffer into instance variables. It returns self for
easy method chaining.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpPacketTypes.TftpPacketDAT.encode">
<tt class="descname">encode</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketDAT.encode" title="Permalink to this definition"></a></dt>
<dd>Encode the DAT packet. This method populates self.buffer, and
returns self for easy method chaining.</dd></dl>
<dd><p>Encode the DAT packet. This method populates self.buffer, and
returns self for easy method chaining.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpPacketTypes.TftpPacketERR">
<em class="property">class </em><tt class="descclassname">tftpy.TftpPacketTypes.</tt><tt class="descname">TftpPacketERR</tt><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketERR" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpPacketTypes.TftpPacket" class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacket"><tt class="xref docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacket</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacket" title="tftpy.TftpPacketTypes.TftpPacket"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacket</span></tt></a></p>
<div class="highlight-python"><pre> 2 bytes 2 bytes string 1 byte
----------------------------------------
ERROR | 05 | ErrorCode | ErrMsg | 0 |
@ -289,33 +300,36 @@ Value Meaning
<dl class="method">
<dt id="tftpy.TftpPacketTypes.TftpPacketERR.decode">
<tt class="descname">decode</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketERR.decode" title="Permalink to this definition"></a></dt>
<dd>Decode self.buffer, populating instance variables and return self.</dd></dl>
<dd><p>Decode self.buffer, populating instance variables and return self.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpPacketTypes.TftpPacketERR.encode">
<tt class="descname">encode</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketERR.encode" title="Permalink to this definition"></a></dt>
<dd>Encode the DAT packet based on instance variables, populating
self.buffer, returning self.</dd></dl>
<dd><p>Encode the DAT packet based on instance variables, populating
self.buffer, returning self.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpPacketTypes.TftpPacketInitial">
<em class="property">class </em><tt class="descclassname">tftpy.TftpPacketTypes.</tt><tt class="descname">TftpPacketInitial</tt><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketInitial" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpPacketTypes.TftpPacket" class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacket"><tt class="xref docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacket</span></tt></a>, <a title="tftpy.TftpPacketTypes.TftpPacketWithOptions" class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacketWithOptions"><tt class="xref docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacketWithOptions</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacket" title="tftpy.TftpPacketTypes.TftpPacket"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacket</span></tt></a>, <a class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacketWithOptions" title="tftpy.TftpPacketTypes.TftpPacketWithOptions"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacketWithOptions</span></tt></a></p>
<p>This class is a common parent class for the RRQ and WRQ packets, as
they share quite a bit of code.</p>
<dl class="method">
<dt id="tftpy.TftpPacketTypes.TftpPacketInitial.encode">
<tt class="descname">encode</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketInitial.encode" title="Permalink to this definition"></a></dt>
<dd>Encode the packet&#8217;s buffer from the instance variables.</dd></dl>
<dd><p>Encode the packet&#8217;s buffer from the instance variables.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpPacketTypes.TftpPacketOACK">
<em class="property">class </em><tt class="descclassname">tftpy.TftpPacketTypes.</tt><tt class="descname">TftpPacketOACK</tt><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketOACK" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpPacketTypes.TftpPacket" class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacket"><tt class="xref docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacket</span></tt></a>, <a title="tftpy.TftpPacketTypes.TftpPacketWithOptions" class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacketWithOptions"><tt class="xref docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacketWithOptions</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacket" title="tftpy.TftpPacketTypes.TftpPacket"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacket</span></tt></a>, <a class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacketWithOptions" title="tftpy.TftpPacketTypes.TftpPacketWithOptions"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacketWithOptions</span></tt></a></p>
<div class="highlight-python"><pre>+-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+
| opc | opt1 | 0 | value1 | 0 | optN | 0 | valueN | 0 |
+-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+</pre>
@ -323,18 +337,19 @@ they share quite a bit of code.</p>
<dl class="method">
<dt id="tftpy.TftpPacketTypes.TftpPacketOACK.match_options">
<tt class="descname">match_options</tt><big>(</big><em>options</em><big>)</big><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketOACK.match_options" title="Permalink to this definition"></a></dt>
<dd>This method takes a set of options, and tries to match them with
<dd><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.</dd></dl>
options.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpPacketTypes.TftpPacketRRQ">
<em class="property">class </em><tt class="descclassname">tftpy.TftpPacketTypes.</tt><tt class="descname">TftpPacketRRQ</tt><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketRRQ" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpPacketTypes.TftpPacketInitial" class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacketInitial"><tt class="xref docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacketInitial</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacketInitial" title="tftpy.TftpPacketTypes.TftpPacketInitial"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacketInitial</span></tt></a></p>
<div class="highlight-python"><pre> 2 bytes string 1 byte string 1 byte
-----------------------------------------------
RRQ/ | 01/02 | Filename | 0 | Mode | 0 |
@ -345,7 +360,7 @@ WRQ -----------------------------------------------</pre>
<dl class="class">
<dt id="tftpy.TftpPacketTypes.TftpPacketWRQ">
<em class="property">class </em><tt class="descclassname">tftpy.TftpPacketTypes.</tt><tt class="descname">TftpPacketWRQ</tt><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketWRQ" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpPacketTypes.TftpPacketInitial" class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacketInitial"><tt class="xref docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacketInitial</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpPacketTypes.TftpPacketInitial" title="tftpy.TftpPacketTypes.TftpPacketInitial"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpPacketTypes.TftpPacketInitial</span></tt></a></p>
<div class="highlight-python"><pre> 2 bytes string 1 byte string 1 byte
-----------------------------------------------
RRQ/ | 01/02 | Filename | 0 | Mode | 0 |
@ -356,35 +371,36 @@ WRQ -----------------------------------------------</pre>
<dl class="class">
<dt id="tftpy.TftpPacketTypes.TftpPacketWithOptions">
<em class="property">class </em><tt class="descclassname">tftpy.TftpPacketTypes.</tt><tt class="descname">TftpPacketWithOptions</tt><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketWithOptions" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref docutils literal"><span class="pre">object</span></tt></p>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<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>
<dl class="method">
<dt id="tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options">
<tt class="descname">decode_options</tt><big>(</big><em>buffer</em><big>)</big><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpPacketWithOptions.decode_options" title="Permalink to this definition"></a></dt>
<dd>This method decodes the section of the buffer that contains an
<dd><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.</dd></dl>
values.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpPacketTypes.TftpSession">
<em class="property">class </em><tt class="descclassname">tftpy.TftpPacketTypes.</tt><tt class="descname">TftpSession</tt><a class="headerlink" href="#tftpy.TftpPacketTypes.TftpSession" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref docutils literal"><span class="pre">object</span></tt></p>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>This class is the base class for the tftp client and server. Any shared
code should be in this class.</p>
</dd></dl>
</div>
<div class="section" id="module-tftpy.TftpShared">
<h3>The <cite>TftpShared</cite> Module<a class="headerlink" href="#module-tftpy.TftpShared" title="Permalink to this headline"></a></h3>
<span id="the-tftpshared-module"></span><h3>The <cite>TftpShared</cite> Module<a class="headerlink" href="#module-tftpy.TftpShared" title="Permalink to this headline"></a></h3>
<p>This module holds all objects shared by all other modules in tftpy.</p>
<dl class="class">
<dt id="tftpy.TftpShared.TftpErrors">
<em class="property">class </em><tt class="descclassname">tftpy.TftpShared.</tt><tt class="descname">TftpErrors</tt><a class="headerlink" href="#tftpy.TftpShared.TftpErrors" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref docutils literal"><span class="pre">object</span></tt></p>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>This class is a convenience for defining the common tftp error codes,
and making them more readable in the code.</p>
</dd></dl>
@ -392,32 +408,41 @@ and making them more readable in the code.</p>
<dl class="exception">
<dt id="tftpy.TftpShared.TftpException">
<em class="property">exception </em><tt class="descclassname">tftpy.TftpShared.</tt><tt class="descname">TftpException</tt><a class="headerlink" href="#tftpy.TftpShared.TftpException" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref docutils literal"><span class="pre">exceptions.Exception</span></tt></p>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></tt></p>
<p>This class is the parent class of all exceptions regarding the handling
of the TFTP protocol.</p>
</dd></dl>
<dl class="exception">
<dt id="tftpy.TftpShared.TftpTimeout">
<em class="property">exception </em><tt class="descclassname">tftpy.TftpShared.</tt><tt class="descname">TftpTimeout</tt><a class="headerlink" href="#tftpy.TftpShared.TftpTimeout" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpShared.TftpException" title="tftpy.TftpShared.TftpException"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpShared.TftpException</span></tt></a></p>
<p>This class represents a timeout error waiting for a response from the
other end.</p>
</dd></dl>
<dl class="function">
<dt id="tftpy.TftpShared.setLogLevel">
<tt class="descclassname">tftpy.TftpShared.</tt><tt class="descname">setLogLevel</tt><big>(</big><em>level</em><big>)</big><a class="headerlink" href="#tftpy.TftpShared.setLogLevel" title="Permalink to this definition"></a></dt>
<dd>This function is a utility function for setting the internal log level.
<dd><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.</dd></dl>
not created.</p>
</dd></dl>
<dl class="function">
<dt id="tftpy.TftpShared.tftpassert">
<tt class="descclassname">tftpy.TftpShared.</tt><tt class="descname">tftpassert</tt><big>(</big><em>condition</em>, <em>msg</em><big>)</big><a class="headerlink" href="#tftpy.TftpShared.tftpassert" title="Permalink to this definition"></a></dt>
<dd>This function is a simple utility that will check the condition
<dd><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.</dd></dl>
by refactoring.</p>
</dd></dl>
</div>
<div class="section" id="module-tftpy.TftpStates">
<h3>The <cite>TftpStates</cite> Module<a class="headerlink" href="#module-tftpy.TftpStates" title="Permalink to this headline"></a></h3>
<p>This module implements all state handling during uploads and downloads, the
main interface to which being the TftpContext base class and the TftpState
base class.</p>
<div class="section" id="module-tftpy.TftpContexts">
<span id="the-tftpcontexts-module"></span><h3>The <cite>TftpContexts</cite> Module<a class="headerlink" href="#module-tftpy.TftpContexts" title="Permalink to this headline"></a></h3>
<p>This module implements all contexts for state handling during uploads and
downloads, the main interface to which being the TftpContext base class.</p>
<p>The concept is simple. Each context object represents a single upload or
download, and the state object in the context object represents the current
state of that transfer. The state object has a handle() method that expects
@ -425,180 +450,224 @@ the next packet in the transfer, and returns a state object until the transfer
is complete, at which point it returns None. That is, unless there is a fatal
error, in which case a TftpException is returned instead.</p>
<dl class="class">
<dt id="tftpy.TftpStates.TftpContext">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpContext</tt><big>(</big><em>host</em>, <em>port</em>, <em>timeout</em>, <em>dyn_file_func=None</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContext" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref docutils literal"><span class="pre">object</span></tt></p>
<dt id="tftpy.TftpContexts.TftpContext">
<em class="property">class </em><tt class="descclassname">tftpy.TftpContexts.</tt><tt class="descname">TftpContext</tt><big>(</big><em>host</em>, <em>port</em>, <em>timeout</em>, <em>dyn_file_func=None</em><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContext" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>The base class of the contexts.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpContext.checkTimeout">
<tt class="descname">checkTimeout</tt><big>(</big><em>now</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContext.checkTimeout" title="Permalink to this definition"></a></dt>
<dd>Compare current time with last_update time, and raise an exception
if we&#8217;re over SOCK_TIMEOUT time.</dd></dl>
<dt id="tftpy.TftpContexts.TftpContext.checkTimeout">
<tt class="descname">checkTimeout</tt><big>(</big><em>now</em><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContext.checkTimeout" title="Permalink to this definition"></a></dt>
<dd><p>Compare current time with last_update time, and raise an exception
if we&#8217;re over the timeout time.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpContext.cycle">
<tt class="descname">cycle</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContext.cycle" title="Permalink to this definition"></a></dt>
<dd>Here we wait for a response from the server after sending it
something, and dispatch appropriate action to that response.</dd></dl>
<dt id="tftpy.TftpContexts.TftpContext.cycle">
<tt class="descname">cycle</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContext.cycle" title="Permalink to this definition"></a></dt>
<dd><p>Here we wait for a response from the server after sending it
something, and dispatch appropriate action to that response.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpContext.end">
<tt class="descname">end</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContext.end" title="Permalink to this definition"></a></dt>
<dd>Perform session cleanup, since the end method should always be
<dt id="tftpy.TftpContexts.TftpContext.end">
<tt class="descname">end</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContext.end" title="Permalink to this definition"></a></dt>
<dd><p>Perform session cleanup, since the end method should always be
called explicitely by the calling code, this works better than the
destructor.</dd></dl>
destructor.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpContext.gethost">
<tt class="descname">gethost</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContext.gethost" title="Permalink to this definition"></a></dt>
<dd>Simple getter method for use in a property.</dd></dl>
<dt id="tftpy.TftpContexts.TftpContext.getBlocksize">
<tt class="descname">getBlocksize</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContext.getBlocksize" title="Permalink to this definition"></a></dt>
<dd><p>Fetch the current blocksize for this session.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpContexts.TftpContext.gethost">
<tt class="descname">gethost</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContext.gethost" title="Permalink to this definition"></a></dt>
<dd><p>Simple getter method for use in a property.</p>
</dd></dl>
<dl class="attribute">
<dt id="tftpy.TftpStates.TftpContext.host">
<tt class="descname">host</tt><a class="headerlink" href="#tftpy.TftpStates.TftpContext.host" title="Permalink to this definition"></a></dt>
<dd>Simple getter method for use in a property.</dd></dl>
<dt id="tftpy.TftpContexts.TftpContext.host">
<tt class="descname">host</tt><a class="headerlink" href="#tftpy.TftpContexts.TftpContext.host" title="Permalink to this definition"></a></dt>
<dd><p>Simple getter method for use in a property.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpContext.sethost">
<tt class="descname">sethost</tt><big>(</big><em>host</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContext.sethost" title="Permalink to this definition"></a></dt>
<dd>Setter method that also sets the address property as a result
of the host that is set.</dd></dl>
<dt id="tftpy.TftpContexts.TftpContext.sethost">
<tt class="descname">sethost</tt><big>(</big><em>host</em><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContext.sethost" title="Permalink to this definition"></a></dt>
<dd><p>Setter method that also sets the address property as a result
of the host that is set.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpStates.TftpContextClientDownload">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpContextClientDownload</tt><big>(</big><em>host</em>, <em>port</em>, <em>filename</em>, <em>output</em>, <em>options</em>, <em>packethook</em>, <em>timeout</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContextClientDownload" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpStates.TftpContext" class="reference internal" href="#tftpy.TftpStates.TftpContext"><tt class="xref docutils literal"><span class="pre">tftpy.TftpStates.TftpContext</span></tt></a></p>
<dt id="tftpy.TftpContexts.TftpContextClientDownload">
<em class="property">class </em><tt class="descclassname">tftpy.TftpContexts.</tt><tt class="descname">TftpContextClientDownload</tt><big>(</big><em>host</em>, <em>port</em>, <em>filename</em>, <em>output</em>, <em>options</em>, <em>packethook</em>, <em>timeout</em><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContextClientDownload" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpContexts.TftpContext" title="tftpy.TftpContexts.TftpContext"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpContexts.TftpContext</span></tt></a></p>
<p>The download context for the client during a download.
Note: If output is a hyphen, then the output will be sent to stdout.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpContextClientDownload.end">
<tt class="descname">end</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContextClientDownload.end" title="Permalink to this definition"></a></dt>
<dd>Finish up the context.</dd></dl>
<dt id="tftpy.TftpContexts.TftpContextClientDownload.end">
<tt class="descname">end</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContextClientDownload.end" title="Permalink to this definition"></a></dt>
<dd><p>Finish up the context.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpContextClientDownload.start">
<tt class="descname">start</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContextClientDownload.start" title="Permalink to this definition"></a></dt>
<dd>Initiate the download.</dd></dl>
<dt id="tftpy.TftpContexts.TftpContextClientDownload.start">
<tt class="descname">start</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContextClientDownload.start" title="Permalink to this definition"></a></dt>
<dd><p>Initiate the download.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpStates.TftpContextClientUpload">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpContextClientUpload</tt><big>(</big><em>host</em>, <em>port</em>, <em>filename</em>, <em>input</em>, <em>options</em>, <em>packethook</em>, <em>timeout</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContextClientUpload" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpStates.TftpContext" class="reference internal" href="#tftpy.TftpStates.TftpContext"><tt class="xref docutils literal"><span class="pre">tftpy.TftpStates.TftpContext</span></tt></a></p>
<dt id="tftpy.TftpContexts.TftpContextClientUpload">
<em class="property">class </em><tt class="descclassname">tftpy.TftpContexts.</tt><tt class="descname">TftpContextClientUpload</tt><big>(</big><em>host</em>, <em>port</em>, <em>filename</em>, <em>input</em>, <em>options</em>, <em>packethook</em>, <em>timeout</em><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContextClientUpload" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpContexts.TftpContext" title="tftpy.TftpContexts.TftpContext"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpContexts.TftpContext</span></tt></a></p>
<p>The upload context for the client during an upload.
Note: If input is a hyphen, then we will use stdin.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpContextClientUpload.end">
<tt class="descname">end</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContextClientUpload.end" title="Permalink to this definition"></a></dt>
<dd>Finish up the context.</dd></dl>
<dt id="tftpy.TftpContexts.TftpContextClientUpload.end">
<tt class="descname">end</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContextClientUpload.end" title="Permalink to this definition"></a></dt>
<dd><p>Finish up the context.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpStates.TftpContextServer">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpContextServer</tt><big>(</big><em>host</em>, <em>port</em>, <em>timeout</em>, <em>root</em>, <em>dyn_file_func=None</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContextServer" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpStates.TftpContext" class="reference internal" href="#tftpy.TftpStates.TftpContext"><tt class="xref docutils literal"><span class="pre">tftpy.TftpStates.TftpContext</span></tt></a></p>
<dt id="tftpy.TftpContexts.TftpContextServer">
<em class="property">class </em><tt class="descclassname">tftpy.TftpContexts.</tt><tt class="descname">TftpContextServer</tt><big>(</big><em>host</em>, <em>port</em>, <em>timeout</em>, <em>root</em>, <em>dyn_file_func=None</em><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContextServer" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpContexts.TftpContext" title="tftpy.TftpContexts.TftpContext"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpContexts.TftpContext</span></tt></a></p>
<p>The context for the server.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpContextServer.end">
<tt class="descname">end</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContextServer.end" title="Permalink to this definition"></a></dt>
<dd>Finish up the context.</dd></dl>
<dt id="tftpy.TftpContexts.TftpContextServer.end">
<tt class="descname">end</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContextServer.end" title="Permalink to this definition"></a></dt>
<dd><p>Finish up the context.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpContextServer.start">
<tt class="descname">start</tt><big>(</big><em>buffer</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpContextServer.start" title="Permalink to this definition"></a></dt>
<dd>Start the state cycle. Note that the server context receives an
<dt id="tftpy.TftpContexts.TftpContextServer.start">
<tt class="descname">start</tt><big>(</big><em>buffer</em><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpContextServer.start" title="Permalink to this definition"></a></dt>
<dd><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.</dd></dl>
that.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpStates.TftpMetrics">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpMetrics</tt><a class="headerlink" href="#tftpy.TftpStates.TftpMetrics" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref docutils literal"><span class="pre">object</span></tt></p>
<dt id="tftpy.TftpContexts.TftpMetrics">
<em class="property">class </em><tt class="descclassname">tftpy.TftpContexts.</tt><tt class="descname">TftpMetrics</tt><a class="headerlink" href="#tftpy.TftpContexts.TftpMetrics" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>A class representing metrics of the transfer.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpMetrics.add_dup">
<tt class="descname">add_dup</tt><big>(</big><em>blocknumber</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpMetrics.add_dup" title="Permalink to this definition"></a></dt>
<dd>This method adds a dup for a block number to the metrics.</dd></dl>
<dt id="tftpy.TftpContexts.TftpMetrics.add_dup">
<tt class="descname">add_dup</tt><big>(</big><em>pkt</em><big>)</big><a class="headerlink" href="#tftpy.TftpContexts.TftpMetrics.add_dup" title="Permalink to this definition"></a></dt>
<dd><p>This method adds a dup for a packet to the metrics.</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-tftpy.TftpStates">
<span id="the-tftpstates-module"></span><h3>The <cite>TftpStates</cite> Module<a class="headerlink" href="#module-tftpy.TftpStates" title="Permalink to this headline"></a></h3>
<p>This module implements all state handling during uploads and downloads, the
main interface to which being the TftpState base class.</p>
<p>The concept is simple. Each context object represents a single upload or
download, and the state object in the context object represents the current
state of that transfer. The state object has a handle() method that expects
the next packet in the transfer, and returns a state object until the transfer
is complete, at which point it returns None. That is, unless there is a fatal
error, in which case a TftpException is returned instead.</p>
<dl class="class">
<dt id="tftpy.TftpStates.TftpState">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpState</tt><big>(</big><em>context</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref docutils literal"><span class="pre">object</span></tt></p>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>The base class for the states.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpState.handle">
<tt class="descname">handle</tt><big>(</big><em>pkt</em>, <em>raddress</em>, <em>rport</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState.handle" title="Permalink to this definition"></a></dt>
<dd>An abstract method for handling a packet. It is expected to return
a TftpState object, either itself or a new state.</dd></dl>
<dd><p>An abstract method for handling a packet. It is expected to return
a TftpState object, either itself or a new state.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpState.handleDat">
<tt class="descname">handleDat</tt><big>(</big><em>pkt</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState.handleDat" title="Permalink to this definition"></a></dt>
<dd>This method handles a DAT packet during a client download, or a
server upload.</dd></dl>
<dd><p>This method handles a DAT packet during a client download, or a
server upload.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpState.handleOACK">
<tt class="descname">handleOACK</tt><big>(</big><em>pkt</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState.handleOACK" title="Permalink to this definition"></a></dt>
<dd>This method handles an OACK from the server, syncing any accepted
options.</dd></dl>
<dd><p>This method handles an OACK from the server, syncing any accepted
options.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpState.resendLast">
<tt class="descname">resendLast</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState.resendLast" title="Permalink to this definition"></a></dt>
<dd><p>Resend the last sent packet due to a timeout.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpState.returnSupportedOptions">
<tt class="descname">returnSupportedOptions</tt><big>(</big><em>options</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState.returnSupportedOptions" title="Permalink to this definition"></a></dt>
<dd>This method takes a requested options list from a client, and
returns the ones that are supported.</dd></dl>
<dd><p>This method takes a requested options list from a client, and
returns the ones that are supported.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpState.sendACK">
<tt class="descname">sendACK</tt><big>(</big><em>blocknumber=None</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState.sendACK" title="Permalink to this definition"></a></dt>
<dd>This method sends an ack packet to the block number specified. If
<dd><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.</dd></dl>
parent context.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpState.sendDAT">
<tt class="descname">sendDAT</tt><big>(</big><em>resend=False</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState.sendDAT" title="Permalink to this definition"></a></dt>
<dd>This method sends the next DAT packet based on the data in the
<tt class="descname">sendDAT</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState.sendDAT" title="Permalink to this definition"></a></dt>
<dd><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.</dd></dl>
finished.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpState.sendError">
<tt class="descname">sendError</tt><big>(</big><em>errorcode</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState.sendError" title="Permalink to this definition"></a></dt>
<dd>This method uses the socket passed, and uses the errorcode to
compose and send an error packet.</dd></dl>
<dd><p>This method uses the socket passed, and uses the errorcode to
compose and send an error packet.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpState.sendOACK">
<tt class="descname">sendOACK</tt><big>(</big><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState.sendOACK" title="Permalink to this definition"></a></dt>
<dd>This method sends an OACK packet with the options from the current
context.</dd></dl>
<dd><p>This method sends an OACK packet with the options from the current
context.</p>
</dd></dl>
<dl class="method">
<dt id="tftpy.TftpStates.TftpState.serverInitial">
<tt class="descname">serverInitial</tt><big>(</big><em>pkt</em>, <em>raddress</em>, <em>rport</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpState.serverInitial" title="Permalink to this definition"></a></dt>
<dd>This method performs initial setup for a server context transfer,
<dd><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.</dd></dl>
it is required to send an OACK to the client.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpStates.TftpStateExpectACK">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpStateExpectACK</tt><big>(</big><em>context</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateExpectACK" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpStates.TftpState" class="reference internal" href="#tftpy.TftpStates.TftpState"><tt class="xref docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpStates.TftpState" title="tftpy.TftpStates.TftpState"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<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
@ -606,83 +675,90 @@ download.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpStateExpectACK.handle">
<tt class="descname">handle</tt><big>(</big><em>pkt</em>, <em>raddress</em>, <em>rport</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateExpectACK.handle" title="Permalink to this definition"></a></dt>
<dd>Handle a packet, hopefully an ACK since we just sent a DAT.</dd></dl>
<dd><p>Handle a packet, hopefully an ACK since we just sent a DAT.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpStates.TftpStateExpectDAT">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpStateExpectDAT</tt><big>(</big><em>context</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateExpectDAT" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpStates.TftpState" class="reference internal" href="#tftpy.TftpStates.TftpState"><tt class="xref docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpStates.TftpState" title="tftpy.TftpStates.TftpState"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<p>Just sent an ACK packet. Waiting for DAT.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpStateExpectDAT.handle">
<tt class="descname">handle</tt><big>(</big><em>pkt</em>, <em>raddress</em>, <em>rport</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateExpectDAT.handle" title="Permalink to this definition"></a></dt>
<dd>Handle the packet in response to an ACK, which should be a DAT.</dd></dl>
<dd><p>Handle the packet in response to an ACK, which should be a DAT.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpStates.TftpStateSentRRQ">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpStateSentRRQ</tt><big>(</big><em>context</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateSentRRQ" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpStates.TftpState" class="reference internal" href="#tftpy.TftpStates.TftpState"><tt class="xref docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpStates.TftpState" title="tftpy.TftpStates.TftpState"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<p>Just sent an RRQ packet.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpStateSentRRQ.handle">
<tt class="descname">handle</tt><big>(</big><em>pkt</em>, <em>raddress</em>, <em>rport</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateSentRRQ.handle" title="Permalink to this definition"></a></dt>
<dd>Handle the packet in response to an RRQ to the server.</dd></dl>
<dd><p>Handle the packet in response to an RRQ to the server.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpStates.TftpStateSentWRQ">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpStateSentWRQ</tt><big>(</big><em>context</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateSentWRQ" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpStates.TftpState" class="reference internal" href="#tftpy.TftpStates.TftpState"><tt class="xref docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpStates.TftpState" title="tftpy.TftpStates.TftpState"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<p>Just sent an WRQ packet for an upload.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpStateSentWRQ.handle">
<tt class="descname">handle</tt><big>(</big><em>pkt</em>, <em>raddress</em>, <em>rport</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateSentWRQ.handle" title="Permalink to this definition"></a></dt>
<dd>Handle a packet we just received.</dd></dl>
<dd><p>Handle a packet we just received.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpStates.TftpStateServerRecvRRQ">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpStateServerRecvRRQ</tt><big>(</big><em>context</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateServerRecvRRQ" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpStates.TftpState" class="reference internal" href="#tftpy.TftpStates.TftpState"><tt class="xref docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpStates.TftpState" title="tftpy.TftpStates.TftpState"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<p>This class represents the state of the TFTP server when it has just
received an RRQ packet.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpStateServerRecvRRQ.handle">
<tt class="descname">handle</tt><big>(</big><em>pkt</em>, <em>raddress</em>, <em>rport</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateServerRecvRRQ.handle" title="Permalink to this definition"></a></dt>
<dd>Handle an initial RRQ packet as a server.</dd></dl>
<dd><p>Handle an initial RRQ packet as a server.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpStates.TftpStateServerRecvWRQ">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpStateServerRecvWRQ</tt><big>(</big><em>context</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateServerRecvWRQ" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpStates.TftpState" class="reference internal" href="#tftpy.TftpStates.TftpState"><tt class="xref docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpStates.TftpState" title="tftpy.TftpStates.TftpState"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<p>This class represents the state of the TFTP server when it has just
received a WRQ packet.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpStateServerRecvWRQ.handle">
<tt class="descname">handle</tt><big>(</big><em>pkt</em>, <em>raddress</em>, <em>rport</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateServerRecvWRQ.handle" title="Permalink to this definition"></a></dt>
<dd>Handle an initial WRQ packet as a server.</dd></dl>
<dd><p>Handle an initial WRQ packet as a server.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="tftpy.TftpStates.TftpStateServerStart">
<em class="property">class </em><tt class="descclassname">tftpy.TftpStates.</tt><tt class="descname">TftpStateServerStart</tt><big>(</big><em>context</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateServerStart" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a title="tftpy.TftpStates.TftpState" class="reference internal" href="#tftpy.TftpStates.TftpState"><tt class="xref docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<dd><p>Bases: <a class="reference internal" href="#tftpy.TftpStates.TftpState" title="tftpy.TftpStates.TftpState"><tt class="xref py py-class docutils literal"><span class="pre">tftpy.TftpStates.TftpState</span></tt></a></p>
<p>The start state for the server. This is a transitory state since at
this point we don&#8217;t know if we&#8217;re handling an upload or a download. We
will commit to one of them once we interpret the initial packet.</p>
<dl class="method">
<dt id="tftpy.TftpStates.TftpStateServerStart.handle">
<tt class="descname">handle</tt><big>(</big><em>pkt</em>, <em>raddress</em>, <em>rport</em><big>)</big><a class="headerlink" href="#tftpy.TftpStates.TftpStateServerStart.handle" title="Permalink to this definition"></a></dt>
<dd>Handle a packet we just received.</dd></dl>
<dd><p>Handle a packet we just received.</p>
</dd></dl>
</dd></dl>
@ -696,50 +772,51 @@ will commit to one of them once we interpret the initial packet.</p>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h3><a href="#">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="#">TFTPy</a><ul>
<h3><a href="#">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">TFTPy</a><ul>
</ul>
</li>
<li><a class="reference external" href="#requirements">Requirements</a></li>
<li><a class="reference external" href="#installation">Installation</a></li>
<li><a class="reference external" href="#examples">Examples</a></li>
<li><a class="reference external" href="#api-documentation">API Documentation</a><ul>
<li><a class="reference external" href="#front-end-modules">Front-end Modules</a><ul>
<li><a class="reference external" href="#module-tftpy">The <tt class="docutils literal"><span class="pre">tftpy</span></tt> Module</a></li>
<li><a class="reference external" href="#module-tftpy.TftpClient">The <cite>TftpClient</cite> Module</a></li>
<li><a class="reference external" href="#module-tftpy.TftpServer">The <cite>TftpServer</cite> Module</a></li>
<li><a class="reference internal" href="#requirements">Requirements</a></li>
<li><a class="reference internal" href="#installation">Installation</a></li>
<li><a class="reference internal" href="#examples">Examples</a></li>
<li><a class="reference internal" href="#api-documentation">API Documentation</a><ul>
<li><a class="reference internal" href="#front-end-modules">Front-end Modules</a><ul>
<li><a class="reference internal" href="#module-tftpy">The <tt class="docutils literal"><span class="pre">tftpy</span></tt> Module</a></li>
<li><a class="reference internal" href="#module-tftpy.TftpClient">The <cite>TftpClient</cite> Module</a></li>
<li><a class="reference internal" href="#module-tftpy.TftpServer">The <cite>TftpServer</cite> Module</a></li>
</ul>
</li>
<li><a class="reference external" href="#back-end-modules">Back-end Modules</a><ul>
<li><a class="reference external" href="#module-tftpy.TftpPacketFactory">The <cite>TftpPacketFactory</cite> Module</a></li>
<li><a class="reference external" href="#module-tftpy.TftpPacketTypes">The <cite>TftpPacketTypes</cite> Module</a></li>
<li><a class="reference external" href="#module-tftpy.TftpShared">The <cite>TftpShared</cite> Module</a></li>
<li><a class="reference external" href="#module-tftpy.TftpStates">The <cite>TftpStates</cite> Module</a></li>
<li><a class="reference internal" href="#back-end-modules">Back-end Modules</a><ul>
<li><a class="reference internal" href="#module-tftpy.TftpPacketFactory">The <cite>TftpPacketFactory</cite> Module</a></li>
<li><a class="reference internal" href="#module-tftpy.TftpPacketTypes">The <cite>TftpPacketTypes</cite> Module</a></li>
<li><a class="reference internal" href="#module-tftpy.TftpShared">The <cite>TftpShared</cite> Module</a></li>
<li><a class="reference internal" href="#module-tftpy.TftpContexts">The <cite>TftpContexts</cite> Module</a></li>
<li><a class="reference internal" href="#module-tftpy.TftpStates">The <cite>TftpStates</cite> Module</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/index.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/index.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
@ -751,14 +828,14 @@ will commit to one of them once we interpret the initial packet.</p>
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="#">TFTPy v0.5.1 documentation</a> &raquo;</li>
<li><a href="#">TFTPy v0.6.0 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, Michael P. Soulier.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.5.
&copy; Copyright 2010, Michael P. Soulier.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

View File

@ -1,124 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Global Module Index &mdash; TFTPy v0.5.1 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '#',
VERSION: '0.5.1',
COLLAPSE_MODINDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="TFTPy v0.5.1 documentation" href="index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="#" title="Global Module Index"
accesskey="M">modules</a> |</li>
<li><a href="index.html">TFTPy v0.5.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1 id="global-module-index">Global Module Index</h1>
<a href="#cap-T"><strong>T</strong></a>
<hr/>
<table width="100%" class="indextable" cellspacing="0" cellpadding="2"><tr class="pcap"><td></td><td>&nbsp;</td><td></td></tr>
<tr class="cap"><td></td><td><a name="cap-T"><strong>T</strong></a></td><td></td></tr><tr>
<td><img src="_static/minus.png" id="toggle-1"
class="toggler" style="display: none" alt="-" /></td>
<td>
<a href="index.html#module-tftpy"><tt class="xref">tftpy</tt></a></td><td>
<em></em></td></tr><tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpClient"><tt class="xref">tftpy.TftpClient</tt></a></td><td>
<em></em></td></tr><tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpPacketFactory"><tt class="xref">tftpy.TftpPacketFactory</tt></a></td><td>
<em></em></td></tr><tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpPacketTypes"><tt class="xref">tftpy.TftpPacketTypes</tt></a></td><td>
<em></em></td></tr><tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpServer"><tt class="xref">tftpy.TftpServer</tt></a></td><td>
<em></em></td></tr><tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpShared"><tt class="xref">tftpy.TftpShared</tt></a></td><td>
<em></em></td></tr><tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpStates"><tt class="xref">tftpy.TftpStates</tt></a></td><td>
<em></em></td></tr>
</table>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="#" title="Global Module Index"
>modules</a> |</li>
<li><a href="index.html">TFTPy v0.5.1 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, Michael P. Soulier.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.5.
</div>
</body>
</html>

Binary file not shown.

View File

@ -0,0 +1,143 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Python Module Index &mdash; TFTPy v0.6.0 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '',
VERSION: '0.6.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="TFTPy v0.6.0 documentation" href="index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="#" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">TFTPy v0.6.0 documentation</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Python Module Index</h1>
<div class="modindex-jumpbox">
<a href="#cap-t"><strong>t</strong></a>
</div>
<table class="indextable modindextable" cellspacing="0" cellpadding="2">
<tr class="pcap"><td></td><td>&nbsp;</td><td></td></tr>
<tr class="cap" id="cap-t"><td></td><td>
<strong>t</strong></td><td></td></tr>
<tr>
<td><img src="_static/minus.png" class="toggler"
id="toggle-1" style="display: none" alt="-" /></td>
<td>
<a href="index.html#module-tftpy"><tt class="xref">tftpy</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpClient"><tt class="xref">tftpy.TftpClient</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpContexts"><tt class="xref">tftpy.TftpContexts</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpPacketFactory"><tt class="xref">tftpy.TftpPacketFactory</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpPacketTypes"><tt class="xref">tftpy.TftpPacketTypes</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpServer"><tt class="xref">tftpy.TftpServer</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpShared"><tt class="xref">tftpy.TftpShared</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-tftpy.TftpStates"><tt class="xref">tftpy.TftpStates</tt></a></td><td>
<em></em></td></tr>
</table>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="#" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">TFTPy v0.6.0 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, Michael P. Soulier.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>

View File

@ -1,3 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@ -5,22 +7,28 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Search &mdash; TFTPy v0.5.1 documentation</title>
<title>Search &mdash; TFTPy v0.6.0 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '#',
VERSION: '0.5.1',
COLLAPSE_MODINDEX: false,
URL_ROOT: '',
VERSION: '0.6.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/searchtools.js"></script>
<link rel="top" title="TFTPy v0.5.1 documentation" href="index.html" />
<link rel="top" title="TFTPy v0.6.0 documentation" href="index.html" />
<script type="text/javascript">
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
</head>
<body>
<div class="related">
@ -30,9 +38,9 @@
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
accesskey="M">modules</a> |</li>
<li><a href="index.html">TFTPy v0.5.1 documentation</a> &raquo;</li>
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">TFTPy v0.6.0 documentation</a> &raquo;</li>
</ul>
</div>
@ -81,17 +89,14 @@
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">TFTPy v0.5.1 documentation</a> &raquo;</li>
<li><a href="index.html">TFTPy v0.6.0 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, Michael P. Soulier.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.5.
&copy; Copyright 2010, Michael P. Soulier.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
<script type="text/javascript" src="searchindex.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long