mirror of
https://github.com/evennia/evennia.git
synced 2026-03-21 23:36:30 +01:00
1373 lines
No EOL
154 KiB
HTML
1373 lines
No EOL
154 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>twisted.conch.telnet — Evennia latest documentation</title>
|
|
<link rel="stylesheet" href="../../../_static/nature.css" type="text/css" />
|
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
|
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=d75fae25" />
|
|
<link rel="stylesheet" type="text/css" href="../../../_static/nature.css?v=245aff17" />
|
|
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
|
<script src="../../../_static/documentation_options.js?v=c6e86fd7"></script>
|
|
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
|
|
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../../search.html" />
|
|
</head><body>
|
|
|
|
|
|
|
|
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<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="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia latest</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">twisted.conch.telnet</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="document">
|
|
|
|
<div class="documentwrapper">
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<search id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</search>
|
|
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Links</h3>
|
|
<ul>
|
|
<li><a href="https://www.evennia.com/docs/latest/index.html">Documentation Top</a> </li>
|
|
<li><a href="https://www.evennia.com">Evennia Home</a> </li>
|
|
<li><a href="https://github.com/evennia/evennia">Github</a> </li>
|
|
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
|
<li>
|
|
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
|
|
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
|
|
<a href="https://evennia.blogspot.com/">Blog</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for twisted.conch.telnet</h1><div class="highlight"><pre>
|
|
<span></span><span class="c1"># -*- test-case-name: twisted.conch.test.test_telnet -*-</span>
|
|
<span class="c1"># Copyright (c) Twisted Matrix Laboratories.</span>
|
|
<span class="c1"># See LICENSE for details.</span>
|
|
|
|
<span class="sd">"""</span>
|
|
<span class="sd">Telnet protocol implementation.</span>
|
|
|
|
<span class="sd">@author: Jean-Paul Calderone</span>
|
|
<span class="sd">"""</span>
|
|
|
|
|
|
<span class="kn">import</span><span class="w"> </span><span class="nn">struct</span>
|
|
|
|
<span class="kn">from</span><span class="w"> </span><span class="nn">zope.interface</span><span class="w"> </span><span class="kn">import</span> <span class="n">implementer</span>
|
|
|
|
<span class="kn">from</span><span class="w"> </span><span class="nn">twisted.internet</span><span class="w"> </span><span class="kn">import</span> <span class="n">defer</span><span class="p">,</span> <span class="n">interfaces</span> <span class="k">as</span> <span class="n">iinternet</span><span class="p">,</span> <span class="n">protocol</span>
|
|
<span class="kn">from</span><span class="w"> </span><span class="nn">twisted.logger</span><span class="w"> </span><span class="kn">import</span> <span class="n">Logger</span>
|
|
<span class="kn">from</span><span class="w"> </span><span class="nn">twisted.python.compat</span><span class="w"> </span><span class="kn">import</span> <span class="n">iterbytes</span>
|
|
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_chr</span><span class="p">(</span><span class="n">i</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bytes</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Create a byte sequence of length 1.</span>
|
|
|
|
<span class="sd"> U{RFC 854<https://tools.ietf.org/html/rfc854>} specifies codes in decimal,</span>
|
|
<span class="sd"> but Python can only handle L{bytes} literals in octal or hexadecimal.</span>
|
|
<span class="sd"> This helper function bridges that gap.</span>
|
|
|
|
<span class="sd"> @param i: The value of the only byte in the sequence.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="nb">bytes</span><span class="p">((</span><span class="n">i</span><span class="p">,))</span>
|
|
|
|
|
|
<span class="n">MODE</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">EDIT</span> <span class="o">=</span> <span class="mi">1</span>
|
|
<span class="n">TRAPSIG</span> <span class="o">=</span> <span class="mi">2</span>
|
|
<span class="n">MODE_ACK</span> <span class="o">=</span> <span class="mi">4</span>
|
|
<span class="n">SOFT_TAB</span> <span class="o">=</span> <span class="mi">8</span>
|
|
<span class="n">LIT_ECHO</span> <span class="o">=</span> <span class="mi">16</span>
|
|
|
|
<span class="c1"># Characters gleaned from the various (and conflicting) RFCs. Not all of these</span>
|
|
<span class="c1"># are correct.</span>
|
|
|
|
<span class="n">NULL</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="c1"># No operation.</span>
|
|
<span class="n">BEL</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span> <span class="c1"># Produces an audible or visible signal (which does NOT move the</span>
|
|
<span class="c1"># print head).</span>
|
|
<span class="n">BS</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span> <span class="c1"># Moves the print head one character position towards the left</span>
|
|
<span class="c1"># margin.</span>
|
|
<span class="n">HT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">9</span><span class="p">)</span> <span class="c1"># Moves the printer to the next horizontal tab stop. It remains</span>
|
|
<span class="c1"># unspecified how either party determines or establishes where such tab stops</span>
|
|
<span class="c1"># are located.</span>
|
|
<span class="n">LF</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="c1"># Moves the printer to the next print line, keeping the same</span>
|
|
<span class="c1"># horizontal position.</span>
|
|
<span class="n">VT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">11</span><span class="p">)</span> <span class="c1"># Moves the printer to the next vertical tab stop. It remains</span>
|
|
<span class="c1"># unspecified how either party determines or establishes where such tab stops</span>
|
|
<span class="c1"># are located.</span>
|
|
<span class="n">FF</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">12</span><span class="p">)</span> <span class="c1"># Moves the printer to the top of the next page, keeping the same</span>
|
|
<span class="c1"># horizontal position.</span>
|
|
<span class="n">CR</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">13</span><span class="p">)</span> <span class="c1"># Moves the printer to the left margin of the current line.</span>
|
|
|
|
<span class="n">ECHO</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># User-to-Server: Asks the server to send Echos of the</span>
|
|
<span class="c1"># transmitted data.</span>
|
|
<span class="n">SGA</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="c1"># Suppress Go Ahead. Go Ahead is silly and most modern servers</span>
|
|
<span class="c1"># should suppress it.</span>
|
|
<span class="n">NAWS</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">31</span><span class="p">)</span> <span class="c1"># Negotiate About Window Size. Indicate that information about</span>
|
|
<span class="c1"># the size of the terminal can be communicated.</span>
|
|
<span class="n">LINEMODE</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">34</span><span class="p">)</span> <span class="c1"># Allow line buffering to be negotiated about.</span>
|
|
|
|
<span class="n">EOR</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">239</span><span class="p">)</span> <span class="c1"># End of Record (RFC 885)</span>
|
|
<span class="n">SE</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">240</span><span class="p">)</span> <span class="c1"># End of subnegotiation parameters.</span>
|
|
<span class="n">NOP</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">241</span><span class="p">)</span> <span class="c1"># No operation.</span>
|
|
<span class="n">DM</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">242</span><span class="p">)</span> <span class="c1"># "Data Mark": The data stream portion of a Synch. This should</span>
|
|
<span class="c1"># always be accompanied by a TCP Urgent notification.</span>
|
|
<span class="n">BRK</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">243</span><span class="p">)</span> <span class="c1"># NVT character Break.</span>
|
|
<span class="n">IP</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">244</span><span class="p">)</span> <span class="c1"># The function Interrupt Process.</span>
|
|
<span class="n">AO</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">245</span><span class="p">)</span> <span class="c1"># The function Abort Output</span>
|
|
<span class="n">AYT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">246</span><span class="p">)</span> <span class="c1"># The function Are You There.</span>
|
|
<span class="n">EC</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">247</span><span class="p">)</span> <span class="c1"># The function Erase Character.</span>
|
|
<span class="n">EL</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">248</span><span class="p">)</span> <span class="c1"># The function Erase Line</span>
|
|
<span class="n">GA</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">249</span><span class="p">)</span> <span class="c1"># The Go Ahead signal.</span>
|
|
<span class="n">SB</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">250</span><span class="p">)</span> <span class="c1"># Indicates that what follows is subnegotiation of the indicated</span>
|
|
<span class="c1"># option.</span>
|
|
<span class="n">WILL</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">251</span><span class="p">)</span> <span class="c1"># Indicates the desire to begin performing, or confirmation</span>
|
|
<span class="c1"># that you are now performing, the indicated option.</span>
|
|
<span class="n">WONT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">252</span><span class="p">)</span> <span class="c1"># Indicates the refusal to perform, or continue performing,</span>
|
|
<span class="c1"># the indicated option.</span>
|
|
<span class="n">DO</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">253</span><span class="p">)</span> <span class="c1"># Indicates the request that the other party perform, or</span>
|
|
<span class="c1"># confirmation that you are expecting the other party to perform, the indicated</span>
|
|
<span class="c1"># option.</span>
|
|
<span class="n">DONT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">254</span><span class="p">)</span> <span class="c1"># Indicates the demand that the other party stop performing,</span>
|
|
<span class="c1"># or confirmation that you are no longer expecting the other party to perform,</span>
|
|
<span class="c1"># the indicated option.</span>
|
|
<span class="n">IAC</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span> <span class="c1"># Data Byte 255. Introduces a telnet command.</span>
|
|
|
|
<span class="n">LINEMODE_MODE</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_EDIT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_TRAPSIG</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_MODE_ACK</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SOFT_TAB</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_LIT_ECHO</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_FORWARDMASK</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_SYNCH</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_BRK</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_IP</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_AO</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_AYT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_EOR</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">6</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_ABORT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_EOF</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_SUSP</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">9</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_EC</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_EL</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">11</span><span class="p">)</span>
|
|
|
|
<span class="n">LINEMODE_SLC_EW</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">12</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_RP</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">13</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_LNEXT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">14</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_XON</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">15</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_XOFF</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">16</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_FORW1</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">17</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_FORW2</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">18</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_MCL</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">19</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_MCR</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_MCWL</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">21</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_MCWR</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">22</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_MCBOL</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">23</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_MCEOL</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">24</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_INSRT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_OVER</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">26</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_ECR</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">27</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_EWR</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">28</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_EBOL</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">29</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_EEOL</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>
|
|
|
|
<span class="n">LINEMODE_SLC_DEFAULT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_VALUE</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_CANTCHANGE</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_NOSUPPORT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_LEVELBITS</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
|
|
|
|
<span class="n">LINEMODE_SLC_ACK</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">128</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_FLUSHIN</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">64</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SLC_FLUSHOUT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">32</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_EOF</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">236</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_SUSP</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">237</span><span class="p">)</span>
|
|
<span class="n">LINEMODE_ABORT</span> <span class="o">=</span> <span class="n">_chr</span><span class="p">(</span><span class="mi">238</span><span class="p">)</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">ITelnetProtocol</span><span class="p">(</span><span class="n">iinternet</span><span class="o">.</span><span class="n">IProtocol</span><span class="p">):</span>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">unhandledCommand</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">argument</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> A command was received but not understood.</span>
|
|
|
|
<span class="sd"> @param command: the command received.</span>
|
|
<span class="sd"> @type command: L{str}, a single character.</span>
|
|
<span class="sd"> @param argument: the argument to the received command.</span>
|
|
<span class="sd"> @type argument: L{str}, a single character, or None if the command that</span>
|
|
<span class="sd"> was unhandled does not provide an argument.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">unhandledSubnegotiation</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> A subnegotiation command was received but not understood.</span>
|
|
|
|
<span class="sd"> @param command: the command being subnegotiated. That is, the first</span>
|
|
<span class="sd"> byte after the SB command.</span>
|
|
<span class="sd"> @type command: L{str}, a single character.</span>
|
|
<span class="sd"> @param data: all other bytes of the subneogation. That is, all but the</span>
|
|
<span class="sd"> first bytes between SB and SE, with IAC un-escaping applied.</span>
|
|
<span class="sd"> @type data: L{bytes}, each a single character</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">enableLocal</span><span class="p">(</span><span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Enable the given option locally.</span>
|
|
|
|
<span class="sd"> This should enable the given option on this side of the</span>
|
|
<span class="sd"> telnet connection and return True. If False is returned,</span>
|
|
<span class="sd"> the option will be treated as still disabled and the peer</span>
|
|
<span class="sd"> will be notified.</span>
|
|
|
|
<span class="sd"> @param option: the option to be enabled.</span>
|
|
<span class="sd"> @type option: L{bytes}, a single character.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">enableRemote</span><span class="p">(</span><span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Indicate whether the peer should be allowed to enable this option.</span>
|
|
|
|
<span class="sd"> Returns True if the peer should be allowed to enable this option,</span>
|
|
<span class="sd"> False otherwise.</span>
|
|
|
|
<span class="sd"> @param option: the option to be enabled.</span>
|
|
<span class="sd"> @type option: L{bytes}, a single character.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">disableLocal</span><span class="p">(</span><span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Disable the given option locally.</span>
|
|
|
|
<span class="sd"> Unlike enableLocal, this method cannot fail. The option must be</span>
|
|
<span class="sd"> disabled.</span>
|
|
|
|
<span class="sd"> @param option: the option to be disabled.</span>
|
|
<span class="sd"> @type option: L{bytes}, a single character.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">disableRemote</span><span class="p">(</span><span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Indicate that the peer has disabled this option.</span>
|
|
|
|
<span class="sd"> @param option: the option to be disabled.</span>
|
|
<span class="sd"> @type option: L{bytes}, a single character.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">ITelnetTransport</span><span class="p">(</span><span class="n">iinternet</span><span class="o">.</span><span class="n">ITransport</span><span class="p">):</span>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">do</span><span class="p">(</span><span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Indicate a desire for the peer to begin performing the given option.</span>
|
|
|
|
<span class="sd"> Returns a Deferred that fires with True when the peer begins performing</span>
|
|
<span class="sd"> the option, or fails with L{OptionRefused} when the peer refuses to</span>
|
|
<span class="sd"> perform it. If the peer is already performing the given option, the</span>
|
|
<span class="sd"> Deferred will fail with L{AlreadyEnabled}. If a negotiation regarding</span>
|
|
<span class="sd"> this option is already in progress, the Deferred will fail with</span>
|
|
<span class="sd"> L{AlreadyNegotiating}.</span>
|
|
|
|
<span class="sd"> Note: It is currently possible that this Deferred will never fire,</span>
|
|
<span class="sd"> if the peer never responds, or if the peer believes the option to</span>
|
|
<span class="sd"> already be enabled.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">dont</span><span class="p">(</span><span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Indicate a desire for the peer to cease performing the given option.</span>
|
|
|
|
<span class="sd"> Returns a Deferred that fires with True when the peer ceases performing</span>
|
|
<span class="sd"> the option. If the peer is not performing the given option, the</span>
|
|
<span class="sd"> Deferred will fail with L{AlreadyDisabled}. If negotiation regarding</span>
|
|
<span class="sd"> this option is already in progress, the Deferred will fail with</span>
|
|
<span class="sd"> L{AlreadyNegotiating}.</span>
|
|
|
|
<span class="sd"> Note: It is currently possible that this Deferred will never fire,</span>
|
|
<span class="sd"> if the peer never responds, or if the peer believes the option to</span>
|
|
<span class="sd"> already be disabled.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">will</span><span class="p">(</span><span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Indicate our willingness to begin performing this option locally.</span>
|
|
|
|
<span class="sd"> Returns a Deferred that fires with True when the peer agrees to allow us</span>
|
|
<span class="sd"> to begin performing this option, or fails with L{OptionRefused} if the</span>
|
|
<span class="sd"> peer refuses to allow us to begin performing it. If the option is</span>
|
|
<span class="sd"> already enabled locally, the Deferred will fail with L{AlreadyEnabled}.</span>
|
|
<span class="sd"> If negotiation regarding this option is already in progress, the</span>
|
|
<span class="sd"> Deferred will fail with L{AlreadyNegotiating}.</span>
|
|
|
|
<span class="sd"> Note: It is currently possible that this Deferred will never fire,</span>
|
|
<span class="sd"> if the peer never responds, or if the peer believes the option to</span>
|
|
<span class="sd"> already be enabled.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">wont</span><span class="p">(</span><span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Indicate that we will stop performing the given option.</span>
|
|
|
|
<span class="sd"> Returns a Deferred that fires with True when the peer acknowledges</span>
|
|
<span class="sd"> we have stopped performing this option. If the option is already</span>
|
|
<span class="sd"> disabled locally, the Deferred will fail with L{AlreadyDisabled}.</span>
|
|
<span class="sd"> If negotiation regarding this option is already in progress,</span>
|
|
<span class="sd"> the Deferred will fail with L{AlreadyNegotiating}.</span>
|
|
|
|
<span class="sd"> Note: It is currently possible that this Deferred will never fire,</span>
|
|
<span class="sd"> if the peer never responds, or if the peer believes the option to</span>
|
|
<span class="sd"> already be disabled.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">requestNegotiation</span><span class="p">(</span><span class="n">about</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Send a subnegotiation request.</span>
|
|
|
|
<span class="sd"> @param about: A byte indicating the feature being negotiated.</span>
|
|
<span class="sd"> @param data: Any number of L{bytes} containing specific information</span>
|
|
<span class="sd"> about the negotiation being requested. No values in this string</span>
|
|
<span class="sd"> need to be escaped, as this function will escape any value which</span>
|
|
<span class="sd"> requires it.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">TelnetError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">NegotiationError</span><span class="p">(</span><span class="n">TelnetError</span><span class="p">):</span>
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__module__</span>
|
|
<span class="o">+</span> <span class="s2">"."</span>
|
|
<span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="o">+</span> <span class="s2">":"</span>
|
|
<span class="o">+</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="p">)</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">OptionRefused</span><span class="p">(</span><span class="n">NegotiationError</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">AlreadyEnabled</span><span class="p">(</span><span class="n">NegotiationError</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">AlreadyDisabled</span><span class="p">(</span><span class="n">NegotiationError</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">AlreadyNegotiating</span><span class="p">(</span><span class="n">NegotiationError</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
|
|
<span class="nd">@implementer</span><span class="p">(</span><span class="n">ITelnetProtocol</span><span class="p">)</span>
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">TelnetProtocol</span><span class="p">(</span><span class="n">protocol</span><span class="o">.</span><span class="n">Protocol</span><span class="p">):</span>
|
|
<span class="n">_log</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">unhandledCommand</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">argument</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">unhandledSubnegotiation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">enableLocal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">enableRemote</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">disableLocal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">disableRemote</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet">[docs]</a>
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">Telnet</span><span class="p">(</span><span class="n">protocol</span><span class="o">.</span><span class="n">Protocol</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> @ivar commandMap: A mapping of bytes to callables. When a</span>
|
|
<span class="sd"> telnet command is received, the command byte (the first byte</span>
|
|
<span class="sd"> after IAC) is looked up in this dictionary. If a callable is</span>
|
|
<span class="sd"> found, it is invoked with the argument of the command, or None</span>
|
|
<span class="sd"> if the command takes no argument. Values should be added to</span>
|
|
<span class="sd"> this dictionary if commands wish to be handled. By default,</span>
|
|
<span class="sd"> only WILL, WONT, DO, and DONT are handled. These should not</span>
|
|
<span class="sd"> be overridden, as this class handles them correctly and</span>
|
|
<span class="sd"> provides an API for interacting with them.</span>
|
|
|
|
<span class="sd"> @ivar negotiationMap: A mapping of bytes to callables. When</span>
|
|
<span class="sd"> a subnegotiation command is received, the command byte (the</span>
|
|
<span class="sd"> first byte after SB) is looked up in this dictionary. If</span>
|
|
<span class="sd"> a callable is found, it is invoked with the argument of the</span>
|
|
<span class="sd"> subnegotiation. Values should be added to this dictionary if</span>
|
|
<span class="sd"> subnegotiations are to be handled. By default, no values are</span>
|
|
<span class="sd"> handled.</span>
|
|
|
|
<span class="sd"> @ivar options: A mapping of option bytes to their current</span>
|
|
<span class="sd"> state. This state is likely of little use to user code.</span>
|
|
<span class="sd"> Changes should not be made to it.</span>
|
|
|
|
<span class="sd"> @ivar state: A string indicating the current parse state. It</span>
|
|
<span class="sd"> can take on the values "data", "escaped", "command", "newline",</span>
|
|
<span class="sd"> "subnegotiation", and "subnegotiation-escaped". Changes</span>
|
|
<span class="sd"> should not be made to it.</span>
|
|
|
|
<span class="sd"> @ivar transport: This protocol's transport object.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="c1"># One of a lot of things</span>
|
|
<span class="n">state</span> <span class="o">=</span> <span class="s2">"data"</span>
|
|
|
|
<div class="viewcode-block" id="Telnet.__init__">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.__init__">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">negotiationMap</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">commandMap</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="n">WILL</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">telnet_WILL</span><span class="p">,</span>
|
|
<span class="n">WONT</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">telnet_WONT</span><span class="p">,</span>
|
|
<span class="n">DO</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">telnet_DO</span><span class="p">,</span>
|
|
<span class="n">DONT</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">telnet_DONT</span><span class="p">,</span>
|
|
<span class="p">}</span></div>
|
|
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_OptionState</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Represents the state of an option on both sides of a telnet</span>
|
|
<span class="sd"> connection.</span>
|
|
|
|
<span class="sd"> @ivar us: The state of the option on this side of the connection.</span>
|
|
|
|
<span class="sd"> @ivar him: The state of the option on the other side of the</span>
|
|
<span class="sd"> connection.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">_Perspective</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Represents the state of an option on side of the telnet</span>
|
|
<span class="sd"> connection. Some options can be enabled on a particular side of</span>
|
|
<span class="sd"> the connection (RFC 1073 for example: only the client can have</span>
|
|
<span class="sd"> NAWS enabled). Other options can be enabled on either or both</span>
|
|
<span class="sd"> sides (such as RFC 1372: each side can have its own flow control</span>
|
|
<span class="sd"> state).</span>
|
|
|
|
<span class="sd"> @ivar state: C{'yes'} or C{'no'} indicating whether or not this</span>
|
|
<span class="sd"> option is enabled on one side of the connection.</span>
|
|
|
|
<span class="sd"> @ivar negotiating: A boolean tracking whether negotiation about</span>
|
|
<span class="sd"> this option is in progress.</span>
|
|
|
|
<span class="sd"> @ivar onResult: When negotiation about this option has been</span>
|
|
<span class="sd"> initiated by this side of the connection, a L{Deferred}</span>
|
|
<span class="sd"> which will fire with the result of the negotiation. L{None}</span>
|
|
<span class="sd"> at other times.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">state</span> <span class="o">=</span> <span class="s2">"no"</span>
|
|
<span class="n">negotiating</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">onResult</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">+</span> <span class="p">(</span><span class="s2">"*"</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">negotiating</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">us</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_Perspective</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">him</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_Perspective</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="sa">f</span><span class="s2">"<_OptionState us=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">us</span><span class="si">}</span><span class="s2"> him=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">him</span><span class="si">}</span><span class="s2">>"</span>
|
|
|
|
<div class="viewcode-block" id="Telnet.getOptionState">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.getOptionState">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">getOptionState</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">opt</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_OptionState</span><span class="p">())</span></div>
|
|
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_do</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_write</span><span class="p">(</span><span class="n">IAC</span> <span class="o">+</span> <span class="n">DO</span> <span class="o">+</span> <span class="n">option</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_dont</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_write</span><span class="p">(</span><span class="n">IAC</span> <span class="o">+</span> <span class="n">DONT</span> <span class="o">+</span> <span class="n">option</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_will</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_write</span><span class="p">(</span><span class="n">IAC</span> <span class="o">+</span> <span class="n">WILL</span> <span class="o">+</span> <span class="n">option</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_wont</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_write</span><span class="p">(</span><span class="n">IAC</span> <span class="o">+</span> <span class="n">WONT</span> <span class="o">+</span> <span class="n">option</span><span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="Telnet.will">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.will">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">will</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Indicate our willingness to enable an option.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOptionState</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">negotiating</span> <span class="ow">or</span> <span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">negotiating</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">defer</span><span class="o">.</span><span class="n">fail</span><span class="p">(</span><span class="n">AlreadyNegotiating</span><span class="p">(</span><span class="n">option</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s2">"yes"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">defer</span><span class="o">.</span><span class="n">fail</span><span class="p">(</span><span class="n">AlreadyEnabled</span><span class="p">(</span><span class="n">option</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">negotiating</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="n">d</span> <span class="o">=</span> <span class="n">defer</span><span class="o">.</span><span class="n">Deferred</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_will</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">d</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.wont">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.wont">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">wont</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Indicate we are not willing to enable an option.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOptionState</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">negotiating</span> <span class="ow">or</span> <span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">negotiating</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">defer</span><span class="o">.</span><span class="n">fail</span><span class="p">(</span><span class="n">AlreadyNegotiating</span><span class="p">(</span><span class="n">option</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s2">"no"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">defer</span><span class="o">.</span><span class="n">fail</span><span class="p">(</span><span class="n">AlreadyDisabled</span><span class="p">(</span><span class="n">option</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">negotiating</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="n">d</span> <span class="o">=</span> <span class="n">defer</span><span class="o">.</span><span class="n">Deferred</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_wont</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">d</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.do">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.do">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">do</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOptionState</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">negotiating</span> <span class="ow">or</span> <span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">negotiating</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">defer</span><span class="o">.</span><span class="n">fail</span><span class="p">(</span><span class="n">AlreadyNegotiating</span><span class="p">(</span><span class="n">option</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s2">"yes"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">defer</span><span class="o">.</span><span class="n">fail</span><span class="p">(</span><span class="n">AlreadyEnabled</span><span class="p">(</span><span class="n">option</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">negotiating</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="n">d</span> <span class="o">=</span> <span class="n">defer</span><span class="o">.</span><span class="n">Deferred</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_do</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">d</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.dont">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.dont">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">dont</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOptionState</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">negotiating</span> <span class="ow">or</span> <span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">negotiating</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">defer</span><span class="o">.</span><span class="n">fail</span><span class="p">(</span><span class="n">AlreadyNegotiating</span><span class="p">(</span><span class="n">option</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s2">"no"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">defer</span><span class="o">.</span><span class="n">fail</span><span class="p">(</span><span class="n">AlreadyDisabled</span><span class="p">(</span><span class="n">option</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">negotiating</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="n">d</span> <span class="o">=</span> <span class="n">defer</span><span class="o">.</span><span class="n">Deferred</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dont</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">d</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.requestNegotiation">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.requestNegotiation">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">requestNegotiation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">about</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Send a negotiation message for the option C{about} with C{data} as the</span>
|
|
<span class="sd"> payload.</span>
|
|
|
|
<span class="sd"> @param data: the payload</span>
|
|
<span class="sd"> @type data: L{bytes}</span>
|
|
<span class="sd"> @see: L{ITelnetTransport.requestNegotiation}</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">IAC</span><span class="p">,</span> <span class="n">IAC</span> <span class="o">*</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_write</span><span class="p">(</span><span class="n">IAC</span> <span class="o">+</span> <span class="n">SB</span> <span class="o">+</span> <span class="n">about</span> <span class="o">+</span> <span class="n">data</span> <span class="o">+</span> <span class="n">IAC</span> <span class="o">+</span> <span class="n">SE</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.dataReceived">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.dataReceived">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">dataReceived</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="n">appDataBuffer</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">iterbytes</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s2">"data"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">b</span> <span class="o">==</span> <span class="n">IAC</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"escaped"</span>
|
|
<span class="k">elif</span> <span class="n">b</span> <span class="o">==</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\r</span><span class="s2">"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"newline"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">appDataBuffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s2">"escaped"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">b</span> <span class="o">==</span> <span class="n">IAC</span><span class="p">:</span>
|
|
<span class="n">appDataBuffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"data"</span>
|
|
<span class="k">elif</span> <span class="n">b</span> <span class="o">==</span> <span class="n">SB</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"subnegotiation"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">commands</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">elif</span> <span class="n">b</span> <span class="ow">in</span> <span class="p">(</span><span class="n">EOR</span><span class="p">,</span> <span class="n">NOP</span><span class="p">,</span> <span class="n">DM</span><span class="p">,</span> <span class="n">BRK</span><span class="p">,</span> <span class="n">IP</span><span class="p">,</span> <span class="n">AO</span><span class="p">,</span> <span class="n">AYT</span><span class="p">,</span> <span class="n">EC</span><span class="p">,</span> <span class="n">EL</span><span class="p">,</span> <span class="n">GA</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"data"</span>
|
|
<span class="k">if</span> <span class="n">appDataBuffer</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">applicationDataReceived</span><span class="p">(</span><span class="sa">b</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">appDataBuffer</span><span class="p">))</span>
|
|
<span class="k">del</span> <span class="n">appDataBuffer</span><span class="p">[:]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">commandReceived</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">b</span> <span class="ow">in</span> <span class="p">(</span><span class="n">WILL</span><span class="p">,</span> <span class="n">WONT</span><span class="p">,</span> <span class="n">DO</span><span class="p">,</span> <span class="n">DONT</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"command"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">command</span> <span class="o">=</span> <span class="n">b</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Stumped"</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s2">"command"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"data"</span>
|
|
<span class="n">command</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span>
|
|
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">command</span>
|
|
<span class="k">if</span> <span class="n">appDataBuffer</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">applicationDataReceived</span><span class="p">(</span><span class="sa">b</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">appDataBuffer</span><span class="p">))</span>
|
|
<span class="k">del</span> <span class="n">appDataBuffer</span><span class="p">[:]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">commandReceived</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s2">"newline"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"data"</span>
|
|
<span class="k">if</span> <span class="n">b</span> <span class="o">==</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">:</span>
|
|
<span class="n">appDataBuffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">b</span> <span class="o">==</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\0</span><span class="s2">"</span><span class="p">:</span>
|
|
<span class="n">appDataBuffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\r</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">b</span> <span class="o">==</span> <span class="n">IAC</span><span class="p">:</span>
|
|
<span class="c1"># IAC isn't really allowed after \r, according to the</span>
|
|
<span class="c1"># RFC, but handling it this way is less surprising than</span>
|
|
<span class="c1"># delivering the IAC to the app as application data.</span>
|
|
<span class="c1"># The purpose of the restriction is to allow terminals</span>
|
|
<span class="c1"># to unambiguously interpret the behavior of the CR</span>
|
|
<span class="c1"># after reading only one more byte. CR LF is supposed</span>
|
|
<span class="c1"># to mean one thing (cursor to next line, first column),</span>
|
|
<span class="c1"># CR NUL another (cursor to first column). Absent the</span>
|
|
<span class="c1"># NUL, it still makes sense to interpret this as CR and</span>
|
|
<span class="c1"># then apply all the usual interpretation to the IAC.</span>
|
|
<span class="n">appDataBuffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\r</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"escaped"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">appDataBuffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\r</span><span class="s2">"</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s2">"subnegotiation"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">b</span> <span class="o">==</span> <span class="n">IAC</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"subnegotiation-escaped"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">commands</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s2">"subnegotiation-escaped"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">b</span> <span class="o">==</span> <span class="n">SE</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"data"</span>
|
|
<span class="n">commands</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">commands</span>
|
|
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">commands</span>
|
|
<span class="k">if</span> <span class="n">appDataBuffer</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">applicationDataReceived</span><span class="p">(</span><span class="sa">b</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">appDataBuffer</span><span class="p">))</span>
|
|
<span class="k">del</span> <span class="n">appDataBuffer</span><span class="p">[:]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">negotiate</span><span class="p">(</span><span class="n">commands</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"subnegotiation"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">commands</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"How'd you do this?"</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">appDataBuffer</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">applicationDataReceived</span><span class="p">(</span><span class="sa">b</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">appDataBuffer</span><span class="p">))</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.connectionLost">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.connectionLost">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">connectionLost</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reason</span><span class="p">):</span>
|
|
<span class="k">for</span> <span class="n">state</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
|
<span class="k">if</span> <span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">onResult</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">d</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">onResult</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">d</span><span class="o">.</span><span class="n">errback</span><span class="p">(</span><span class="n">reason</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">onResult</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">d</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">onResult</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">d</span><span class="o">.</span><span class="n">errback</span><span class="p">(</span><span class="n">reason</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.applicationDataReceived">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.applicationDataReceived">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">applicationDataReceived</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Called with application-level data.</span>
|
|
<span class="sd"> """</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.unhandledCommand">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.unhandledCommand">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">unhandledCommand</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">argument</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Called for commands for which no handler is installed.</span>
|
|
<span class="sd"> """</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.commandReceived">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.commandReceived">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">commandReceived</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">argument</span><span class="p">):</span>
|
|
<span class="n">cmdFunc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">commandMap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">cmdFunc</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">unhandledCommand</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">argument</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">cmdFunc</span><span class="p">(</span><span class="n">argument</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.unhandledSubnegotiation">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.unhandledSubnegotiation">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">unhandledSubnegotiation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Called for subnegotiations for which no handler is installed.</span>
|
|
<span class="sd"> """</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.negotiate">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.negotiate">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">negotiate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="n">command</span><span class="p">,</span> <span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
|
<span class="n">cmdFunc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">negotiationMap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">cmdFunc</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">unhandledSubnegotiation</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">cmdFunc</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.telnet_WILL">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.telnet_WILL">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">telnet_WILL</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOptionState</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">willMap</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">state</span><span class="p">,</span> <span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">negotiating</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">option</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.will_no_false">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.will_no_false">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">will_no_false</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># He is unilaterally offering to enable an option.</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enableRemote</span><span class="p">(</span><span class="n">option</span><span class="p">):</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"yes"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_do</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dont</span><span class="p">(</span><span class="n">option</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.will_no_true">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.will_no_true">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">will_no_true</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># Peer agreed to enable an option in response to our request.</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"yes"</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">negotiating</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">d</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">onResult</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">d</span><span class="o">.</span><span class="n">callback</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">enableRemote</span><span class="p">(</span>
|
|
<span class="n">option</span>
|
|
<span class="p">),</span> <span class="s2">"enableRemote must return True in this context (for option </span><span class="si">{!r}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">option</span>
|
|
<span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.will_yes_false">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.will_yes_false">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">will_yes_false</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># He is unilaterally offering to enable an already-enabled option.</span>
|
|
<span class="c1"># Ignore this.</span>
|
|
<span class="k">pass</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.will_yes_true">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.will_yes_true">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">will_yes_true</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># This is a bogus state. It is here for completeness. It will</span>
|
|
<span class="c1"># never be entered.</span>
|
|
<span class="k">assert</span> <span class="p">(</span>
|
|
<span class="kc">False</span>
|
|
<span class="p">),</span> <span class="s2">"will_yes_true can never be entered, but was called with </span><span class="si">{!r}</span><span class="s2">, </span><span class="si">{!r}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">state</span><span class="p">,</span>
|
|
<span class="n">option</span><span class="p">,</span>
|
|
<span class="p">)</span></div>
|
|
|
|
|
|
<span class="n">willMap</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="p">(</span><span class="s2">"no"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="n">will_no_false</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"no"</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="n">will_no_true</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"yes"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="n">will_yes_false</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"yes"</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="n">will_yes_true</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
|
|
<div class="viewcode-block" id="Telnet.telnet_WONT">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.telnet_WONT">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">telnet_WONT</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOptionState</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">wontMap</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">state</span><span class="p">,</span> <span class="n">s</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">negotiating</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">option</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.wont_no_false">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.wont_no_false">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">wont_no_false</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># He is unilaterally demanding that an already-disabled option be/remain disabled.</span>
|
|
<span class="c1"># Ignore this (although we could record it and refuse subsequent enable attempts</span>
|
|
<span class="c1"># from our side - he can always refuse them again though, so we won't)</span>
|
|
<span class="k">pass</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.wont_no_true">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.wont_no_true">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">wont_no_true</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># Peer refused to enable an option in response to our request.</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">negotiating</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">d</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">onResult</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">d</span><span class="o">.</span><span class="n">errback</span><span class="p">(</span><span class="n">OptionRefused</span><span class="p">(</span><span class="n">option</span><span class="p">))</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.wont_yes_false">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.wont_yes_false">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">wont_yes_false</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># Peer is unilaterally demanding that an option be disabled.</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"no"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">disableRemote</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dont</span><span class="p">(</span><span class="n">option</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.wont_yes_true">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.wont_yes_true">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">wont_yes_true</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># Peer agreed to disable an option at our request.</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"no"</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">negotiating</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">d</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">onResult</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">him</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">d</span><span class="o">.</span><span class="n">callback</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">disableRemote</span><span class="p">(</span><span class="n">option</span><span class="p">)</span></div>
|
|
|
|
|
|
<span class="n">wontMap</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="p">(</span><span class="s2">"no"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="n">wont_no_false</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"no"</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="n">wont_no_true</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"yes"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="n">wont_yes_false</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"yes"</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="n">wont_yes_true</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
|
|
<div class="viewcode-block" id="Telnet.telnet_DO">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.telnet_DO">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">telnet_DO</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOptionState</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">doMap</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">state</span><span class="p">,</span> <span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">negotiating</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">option</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.do_no_false">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.do_no_false">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">do_no_false</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># Peer is unilaterally requesting that we enable an option.</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enableLocal</span><span class="p">(</span><span class="n">option</span><span class="p">):</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"yes"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_will</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_wont</span><span class="p">(</span><span class="n">option</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.do_no_true">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.do_no_true">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">do_no_true</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># Peer agreed to allow us to enable an option at our request.</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"yes"</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">negotiating</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">d</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">onResult</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">d</span><span class="o">.</span><span class="n">callback</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">enableLocal</span><span class="p">(</span><span class="n">option</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.do_yes_false">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.do_yes_false">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">do_yes_false</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># Peer is unilaterally requesting us to enable an already-enabled option.</span>
|
|
<span class="c1"># Ignore this.</span>
|
|
<span class="k">pass</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.do_yes_true">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.do_yes_true">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">do_yes_true</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># This is a bogus state. It is here for completeness. It will never be</span>
|
|
<span class="c1"># entered.</span>
|
|
<span class="k">assert</span> <span class="p">(</span>
|
|
<span class="kc">False</span>
|
|
<span class="p">),</span> <span class="s2">"do_yes_true can never be entered, but was called with </span><span class="si">{!r}</span><span class="s2">, </span><span class="si">{!r}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">state</span><span class="p">,</span>
|
|
<span class="n">option</span><span class="p">,</span>
|
|
<span class="p">)</span></div>
|
|
|
|
|
|
<span class="n">doMap</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="p">(</span><span class="s2">"no"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="n">do_no_false</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"no"</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="n">do_no_true</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"yes"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="n">do_yes_false</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"yes"</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="n">do_yes_true</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
|
|
<div class="viewcode-block" id="Telnet.telnet_DONT">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.telnet_DONT">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">telnet_DONT</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOptionState</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dontMap</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">state</span><span class="p">,</span> <span class="n">s</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">negotiating</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">option</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.dont_no_false">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.dont_no_false">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">dont_no_false</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># Peer is unilaterally demanding us to disable an already-disabled option.</span>
|
|
<span class="c1"># Ignore this.</span>
|
|
<span class="k">pass</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.dont_no_true">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.dont_no_true">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">dont_no_true</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># Offered option was refused. Fail the Deferred returned by the</span>
|
|
<span class="c1"># previous will() call.</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">negotiating</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">d</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">onResult</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">d</span><span class="o">.</span><span class="n">errback</span><span class="p">(</span><span class="n">OptionRefused</span><span class="p">(</span><span class="n">option</span><span class="p">))</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.dont_yes_false">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.dont_yes_false">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">dont_yes_false</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># Peer is unilaterally demanding we disable an option.</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"no"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">disableLocal</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_wont</span><span class="p">(</span><span class="n">option</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.dont_yes_true">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.dont_yes_true">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">dont_yes_true</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="c1"># Peer acknowledged our notice that we will disable an option.</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"no"</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">negotiating</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">d</span> <span class="o">=</span> <span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">onResult</span>
|
|
<span class="n">state</span><span class="o">.</span><span class="n">us</span><span class="o">.</span><span class="n">onResult</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">d</span><span class="o">.</span><span class="n">callback</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">disableLocal</span><span class="p">(</span><span class="n">option</span><span class="p">)</span></div>
|
|
|
|
|
|
<span class="n">dontMap</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="p">(</span><span class="s2">"no"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="n">dont_no_false</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"no"</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="n">dont_no_true</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"yes"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="n">dont_yes_false</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="s2">"yes"</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="n">dont_yes_true</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
|
|
<div class="viewcode-block" id="Telnet.enableLocal">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.enableLocal">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">enableLocal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Reject all attempts to enable options.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="kc">False</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.enableRemote">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.enableRemote">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">enableRemote</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Reject all attempts to enable options.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="kc">False</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.disableLocal">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.disableLocal">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">disableLocal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Signal a programming error by raising an exception.</span>
|
|
|
|
<span class="sd"> L{enableLocal} must return true for the given value of C{option} in</span>
|
|
<span class="sd"> order for this method to be called. If a subclass of L{Telnet}</span>
|
|
<span class="sd"> overrides enableLocal to allow certain options to be enabled, it must</span>
|
|
<span class="sd"> also override disableLocal to disable those options.</span>
|
|
|
|
<span class="sd"> @raise NotImplementedError: Always raised.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
|
|
<span class="sa">f</span><span class="s2">"Don't know how to disable local telnet option </span><span class="si">{</span><span class="n">option</span><span class="si">!r}</span><span class="s2">"</span>
|
|
<span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="Telnet.disableRemote">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.Telnet.disableRemote">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">disableRemote</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Signal a programming error by raising an exception.</span>
|
|
|
|
<span class="sd"> L{enableRemote} must return true for the given value of C{option} in</span>
|
|
<span class="sd"> order for this method to be called. If a subclass of L{Telnet}</span>
|
|
<span class="sd"> overrides enableRemote to allow certain options to be enabled, it must</span>
|
|
<span class="sd"> also override disableRemote tto disable those options.</span>
|
|
|
|
<span class="sd"> @raise NotImplementedError: Always raised.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
|
|
<span class="sa">f</span><span class="s2">"Don't know how to disable remote telnet option </span><span class="si">{</span><span class="n">option</span><span class="si">!r}</span><span class="s2">"</span>
|
|
<span class="p">)</span></div>
|
|
</div>
|
|
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">ProtocolTransportMixin</span><span class="p">:</span>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\r\n</span><span class="s2">"</span><span class="p">))</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">writeSequence</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">seq</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">writeSequence</span><span class="p">(</span><span class="n">seq</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">loseConnection</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">loseConnection</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">getHost</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">getHost</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">getPeer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">getPeer</span><span class="p">()</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">TelnetTransport</span><span class="p">(</span><span class="n">Telnet</span><span class="p">,</span> <span class="n">ProtocolTransportMixin</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> @ivar protocol: An instance of the protocol to which this</span>
|
|
<span class="sd"> transport is connected, or None before the connection is</span>
|
|
<span class="sd"> established and after it is lost.</span>
|
|
|
|
<span class="sd"> @ivar protocolFactory: A callable which returns protocol instances</span>
|
|
<span class="sd"> which provide L{ITelnetProtocol}. This will be invoked when a</span>
|
|
<span class="sd"> connection is established. It is passed *protocolArgs and</span>
|
|
<span class="sd"> **protocolKwArgs.</span>
|
|
|
|
<span class="sd"> @ivar protocolArgs: A tuple of additional arguments to</span>
|
|
<span class="sd"> pass to protocolFactory.</span>
|
|
|
|
<span class="sd"> @ivar protocolKwArgs: A dictionary of additional arguments</span>
|
|
<span class="sd"> to pass to protocolFactory.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">disconnecting</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="n">protocolFactory</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">protocol</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protocolFactory</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">*</span><span class="n">a</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
|
|
<span class="n">Telnet</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">protocolFactory</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocolFactory</span> <span class="o">=</span> <span class="n">protocolFactory</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocolArgs</span> <span class="o">=</span> <span class="n">a</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocolKwArgs</span> <span class="o">=</span> <span class="n">kw</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">connectionMade</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocolFactory</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocolFactory</span><span class="p">(</span>
|
|
<span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">protocolArgs</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">protocolKwArgs</span>
|
|
<span class="p">)</span>
|
|
<span class="k">assert</span> <span class="n">ITelnetProtocol</span><span class="o">.</span><span class="n">providedBy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">factory</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">factory</span>
|
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">factory</span> <span class="o">=</span> <span class="n">factory</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">makeConnection</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">connectionLost</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reason</span><span class="p">):</span>
|
|
<span class="n">Telnet</span><span class="o">.</span><span class="n">connectionLost</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reason</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">connectionLost</span><span class="p">(</span><span class="n">reason</span><span class="p">)</span>
|
|
<span class="k">finally</span><span class="p">:</span>
|
|
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">enableLocal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">enableLocal</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">enableRemote</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">enableRemote</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">disableLocal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">disableLocal</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">disableRemote</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">option</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">disableRemote</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">unhandledSubnegotiation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">unhandledSubnegotiation</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">unhandledCommand</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">argument</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">unhandledCommand</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">argument</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">applicationDataReceived</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">dataReceived</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="n">ProtocolTransportMixin</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\xff</span><span class="s2">"</span><span class="p">,</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\xff\xff</span><span class="s2">"</span><span class="p">))</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">TelnetBootstrapProtocol</span><span class="p">(</span><span class="n">TelnetProtocol</span><span class="p">,</span> <span class="n">ProtocolTransportMixin</span><span class="p">):</span>
|
|
<span class="n">protocol</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">protocolFactory</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocolFactory</span> <span class="o">=</span> <span class="n">protocolFactory</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocolArgs</span> <span class="o">=</span> <span class="n">args</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocolKwArgs</span> <span class="o">=</span> <span class="n">kw</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">connectionMade</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">negotiationMap</span><span class="p">[</span><span class="n">NAWS</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">telnet_NAWS</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">negotiationMap</span><span class="p">[</span><span class="n">LINEMODE</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">telnet_LINEMODE</span>
|
|
|
|
<span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="p">(</span><span class="n">LINEMODE</span><span class="p">,</span> <span class="n">NAWS</span><span class="p">,</span> <span class="n">SGA</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">do</span><span class="p">(</span><span class="n">opt</span><span class="p">)</span><span class="o">.</span><span class="n">addErrback</span><span class="p">(</span>
|
|
<span class="k">lambda</span> <span class="n">f</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">failure</span><span class="p">(</span><span class="s2">"Error do </span><span class="si">{opt!r}</span><span class="s2">"</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">opt</span><span class="o">=</span><span class="n">opt</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="p">(</span><span class="n">ECHO</span><span class="p">,):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">will</span><span class="p">(</span><span class="n">opt</span><span class="p">)</span><span class="o">.</span><span class="n">addErrback</span><span class="p">(</span>
|
|
<span class="k">lambda</span> <span class="n">f</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">failure</span><span class="p">(</span><span class="s2">"Error setting will </span><span class="si">{opt!r}</span><span class="s2">"</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">opt</span><span class="o">=</span><span class="n">opt</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocolFactory</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">protocolArgs</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">protocolKwArgs</span><span class="p">)</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">factory</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">factory</span>
|
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">factory</span> <span class="o">=</span> <span class="n">factory</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">makeConnection</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">connectionLost</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reason</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">connectionLost</span><span class="p">(</span><span class="n">reason</span><span class="p">)</span>
|
|
<span class="k">finally</span><span class="p">:</span>
|
|
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">dataReceived</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">dataReceived</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">enableLocal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">opt</span> <span class="o">==</span> <span class="n">ECHO</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="kc">True</span>
|
|
<span class="k">elif</span> <span class="n">opt</span> <span class="o">==</span> <span class="n">SGA</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="kc">True</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="kc">False</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">enableRemote</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">opt</span> <span class="o">==</span> <span class="n">LINEMODE</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">requestNegotiation</span><span class="p">(</span><span class="n">LINEMODE</span><span class="p">,</span> <span class="n">MODE</span> <span class="o">+</span> <span class="n">LINEMODE_TRAPSIG</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="kc">True</span>
|
|
<span class="k">elif</span> <span class="n">opt</span> <span class="o">==</span> <span class="n">NAWS</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="kc">True</span>
|
|
<span class="k">elif</span> <span class="n">opt</span> <span class="o">==</span> <span class="n">SGA</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="kc">True</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="kc">False</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">telnet_NAWS</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="c1"># NAWS is client -> server *only*. self.protocol will</span>
|
|
<span class="c1"># therefore be an ITerminalTransport, the `.protocol'</span>
|
|
<span class="c1"># attribute of which will be an ITerminalProtocol. Maybe.</span>
|
|
<span class="c1"># You know what, XXX TODO clean this up.</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span>
|
|
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s2">"!HH"</span><span class="p">,</span> <span class="sa">b</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">terminalProtocol</span><span class="o">.</span><span class="n">terminalSize</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Wrong number of NAWS bytes: </span><span class="si">{nbytes}</span><span class="s2">"</span><span class="p">,</span> <span class="n">nbytes</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
|
|
|
|
<span class="n">linemodeSubcommands</span> <span class="o">=</span> <span class="p">{</span><span class="n">LINEMODE_SLC</span><span class="p">:</span> <span class="s2">"SLC"</span><span class="p">}</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">telnet_LINEMODE</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="c1"># linemodeSubcommand = data[0]</span>
|
|
<span class="c1"># # XXX TODO: This should be enabled to parse linemode subnegotiation.</span>
|
|
<span class="c1"># getattr(self, "linemode_" + self.linemodeSubcommands[linemodeSubcommand])(</span>
|
|
<span class="c1"># data[1:]</span>
|
|
<span class="c1"># )</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">linemode_SLC</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="n">chunks</span> <span class="o">=</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="nb">iter</span><span class="p">(</span><span class="n">data</span><span class="p">)]</span> <span class="o">*</span> <span class="mi">3</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">slcFunction</span><span class="p">,</span> <span class="n">slcValue</span><span class="p">,</span> <span class="n">slcWhat</span> <span class="ow">in</span> <span class="n">chunks</span><span class="p">:</span>
|
|
<span class="c1"># Later, we should parse stuff.</span>
|
|
<span class="s2">"SLC"</span><span class="p">,</span> <span class="nb">ord</span><span class="p">(</span><span class="n">slcFunction</span><span class="p">),</span> <span class="nb">ord</span><span class="p">(</span><span class="n">slcValue</span><span class="p">),</span> <span class="nb">ord</span><span class="p">(</span><span class="n">slcWhat</span><span class="p">)</span>
|
|
|
|
|
|
<span class="kn">from</span><span class="w"> </span><span class="nn">twisted.protocols</span><span class="w"> </span><span class="kn">import</span> <span class="n">basic</span>
|
|
|
|
|
|
<div class="viewcode-block" id="StatefulTelnetProtocol">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.StatefulTelnetProtocol">[docs]</a>
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">StatefulTelnetProtocol</span><span class="p">(</span><span class="n">basic</span><span class="o">.</span><span class="n">LineReceiver</span><span class="p">,</span> <span class="n">TelnetProtocol</span><span class="p">):</span>
|
|
<span class="n">delimiter</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span>
|
|
|
|
<span class="n">state</span> <span class="o">=</span> <span class="s2">"Discard"</span>
|
|
|
|
<div class="viewcode-block" id="StatefulTelnetProtocol.connectionLost">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.StatefulTelnetProtocol.connectionLost">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">connectionLost</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reason</span><span class="p">):</span>
|
|
<span class="n">basic</span><span class="o">.</span><span class="n">LineReceiver</span><span class="o">.</span><span class="n">connectionLost</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reason</span><span class="p">)</span>
|
|
<span class="n">TelnetProtocol</span><span class="o">.</span><span class="n">connectionLost</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reason</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="StatefulTelnetProtocol.lineReceived">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.StatefulTelnetProtocol.lineReceived">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">lineReceived</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span>
|
|
<span class="n">oldState</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span>
|
|
<span class="n">newState</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"telnet_"</span> <span class="o">+</span> <span class="n">oldState</span><span class="p">)(</span><span class="n">line</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">newState</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="n">oldState</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="n">newState</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">"state changed and new state returned"</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="StatefulTelnetProtocol.telnet_Discard">
|
|
<a class="viewcode-back" href="../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.StatefulTelnetProtocol.telnet_Discard">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">telnet_Discard</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span>
|
|
<span class="k">pass</span></div>
|
|
</div>
|
|
|
|
|
|
|
|
<span class="kn">from</span><span class="w"> </span><span class="nn">twisted.cred</span><span class="w"> </span><span class="kn">import</span> <span class="n">credentials</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">AuthenticatingTelnetProtocol</span><span class="p">(</span><span class="n">StatefulTelnetProtocol</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> A protocol which prompts for credentials and attempts to authenticate them.</span>
|
|
|
|
<span class="sd"> Username and password prompts are given (the password is obscured). When the</span>
|
|
<span class="sd"> information is collected, it is passed to a portal and an avatar implementing</span>
|
|
<span class="sd"> L{ITelnetProtocol} is requested. If an avatar is returned, it connected to this</span>
|
|
<span class="sd"> protocol's transport, and this protocol's transport is connected to it.</span>
|
|
<span class="sd"> Otherwise, the user is re-prompted for credentials.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">state</span> <span class="o">=</span> <span class="s2">"User"</span>
|
|
<span class="n">protocol</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">portal</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">portal</span> <span class="o">=</span> <span class="n">portal</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">connectionMade</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">b</span><span class="s2">"Username: "</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">connectionLost</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reason</span><span class="p">):</span>
|
|
<span class="n">StatefulTelnetProtocol</span><span class="o">.</span><span class="n">connectionLost</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reason</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="o">.</span><span class="n">connectionLost</span><span class="p">(</span><span class="n">reason</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">logout</span><span class="p">()</span>
|
|
<span class="k">finally</span><span class="p">:</span>
|
|
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">logout</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">telnet_User</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">username</span> <span class="o">=</span> <span class="n">line</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">will</span><span class="p">(</span><span class="n">ECHO</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">b</span><span class="s2">"Password: "</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="s2">"Password"</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">telnet_Password</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span>
|
|
<span class="n">username</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">username</span><span class="p">,</span> <span class="n">line</span>
|
|
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">username</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">login</span><span class="p">(</span><span class="n">ignored</span><span class="p">):</span>
|
|
<span class="n">creds</span> <span class="o">=</span> <span class="n">credentials</span><span class="o">.</span><span class="n">UsernamePassword</span><span class="p">(</span><span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="p">)</span>
|
|
<span class="n">d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">portal</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="n">creds</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">ITelnetProtocol</span><span class="p">)</span>
|
|
<span class="n">d</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cbLogin</span><span class="p">)</span>
|
|
<span class="n">d</span><span class="o">.</span><span class="n">addErrback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_ebLogin</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">wont</span><span class="p">(</span><span class="n">ECHO</span><span class="p">)</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="n">login</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="s2">"Discard"</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_cbLogin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ial</span><span class="p">):</span>
|
|
<span class="n">interface</span><span class="p">,</span> <span class="n">protocol</span><span class="p">,</span> <span class="n">logout</span> <span class="o">=</span> <span class="n">ial</span>
|
|
<span class="k">assert</span> <span class="n">interface</span> <span class="ow">is</span> <span class="n">ITelnetProtocol</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">protocol</span> <span class="o">=</span> <span class="n">protocol</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">logout</span> <span class="o">=</span> <span class="n">logout</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"Command"</span>
|
|
|
|
<span class="n">protocol</span><span class="o">.</span><span class="n">makeConnection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">protocol</span> <span class="o">=</span> <span class="n">protocol</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">_ebLogin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">failure</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\n</span><span class="s2">Authentication failed</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="sa">b</span><span class="s2">"Username: "</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="s2">"User"</span>
|
|
|
|
|
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="c1"># Exceptions</span>
|
|
<span class="s2">"TelnetError"</span><span class="p">,</span>
|
|
<span class="s2">"NegotiationError"</span><span class="p">,</span>
|
|
<span class="s2">"OptionRefused"</span><span class="p">,</span>
|
|
<span class="s2">"AlreadyNegotiating"</span><span class="p">,</span>
|
|
<span class="s2">"AlreadyEnabled"</span><span class="p">,</span>
|
|
<span class="s2">"AlreadyDisabled"</span><span class="p">,</span>
|
|
<span class="c1"># Interfaces</span>
|
|
<span class="s2">"ITelnetProtocol"</span><span class="p">,</span>
|
|
<span class="s2">"ITelnetTransport"</span><span class="p">,</span>
|
|
<span class="c1"># Other stuff, protocols, etc.</span>
|
|
<span class="s2">"Telnet"</span><span class="p">,</span>
|
|
<span class="s2">"TelnetProtocol"</span><span class="p">,</span>
|
|
<span class="s2">"TelnetTransport"</span><span class="p">,</span>
|
|
<span class="s2">"TelnetBootstrapProtocol"</span><span class="p">,</span>
|
|
<span class="p">]</span>
|
|
</pre></div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<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="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia latest</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">twisted.conch.telnet</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2024, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
|
|
</div>
|
|
</body>
|
|
</html> |