<title>File Transfer Protocols | ENiGMA½ BBS Software</title>
<metaname="generator"content="Jekyll v4.2.1"/>
<metaproperty="og:title"content="File Transfer Protocols"/>
<metaproperty="og:locale"content="en_US"/>
<metaname="description"content="ENiGMA½ currently relies on external executable binaries for “legacy” file transfer protocols such as X, Y, and ZModem. Remember that ENiGMA½ also support modern web (HTTP/HTTPS) downloads!"/>
<metaproperty="og:description"content="ENiGMA½ currently relies on external executable binaries for “legacy” file transfer protocols such as X, Y, and ZModem. Remember that ENiGMA½ also support modern web (HTTP/HTTPS) downloads!"/>
{"mainEntityOfPage":{"@type":"WebPage","@id":"/enigma-bbs/configuration/file-transfer-protocols.html"},"description":"ENiGMA½ currently relies on external executable binaries for “legacy” file transfer protocols such as X, Y, and ZModem. Remember that ENiGMA½ also support modern web (HTTP/HTTPS) downloads!","url":"/enigma-bbs/configuration/file-transfer-protocols.html","@type":"BlogPosting","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"/enigma-bbs/assets/images/enigma-logo.png"}},"headline":"File Transfer Protocols","dateModified":"2022-08-09T02:15:50+00:00","datePublished":"2022-08-09T02:15:50+00:00","@context":"https://schema.org"}</script>
<h1class="page-title">File Transfer Protocols</h1>
<p>ENiGMA½ currently relies on external executable binaries for “legacy” file transfer protocols such as X, Y, and ZModem. Remember that ENiGMA½ also support modern web (HTTP/HTTPS) downloads!</p>
<h2id="file-transfer-protocols">File Transfer Protocols</h2>
<p>File transfer protocols are managed via the <codeclass="language-plaintext highlighter-rouge">fileTransferProtocols</code> configuration block of <codeclass="language-plaintext highlighter-rouge">config.hjson</code>. Each entry defines an <strong>external</strong> protocol handler that can be used for uploads (recv), downloads (send), or both. Depending on the protocol and handler, batch receiving of files (uploads) may also be available.</p>
<h3id="predefined-file-transfer-protocols">Predefined File Transfer Protocols</h3>
<p>Please see <ahref="/enigma-bbs/configuration/external-binaries.html">External Binaries</a> for a table of built in / predefined protocol handlers. You will need to have the binaries in ENiGMA’s PATH.</p>
<h4id="sexyz">SEXYZ</h4>
<p><ahref="http://wiki.synchro.net/util:sexyz">SEXYZ from Synchronet</a> offers a nice X, Y, and ZModem implementation including ZModem-8k & works under *nix and Windows based systems. As of this writing, ENiGMA½ is pre-configured to support ZModem-8k, XModem, and YModem using SEXYZ. An x86_64 Linux binary, and hopefully more in the future, <ahref="https://l33t.codes/bbs-linux-binaries/">can be downloaded here</a>.</p>
<h4id="szrz">sz/rz</h4>
<p>ZModem-8k is configured using the standard Linux <ahref="https://linux.die.net/man/1/sz">sz(1)</a> and <ahref="https://linux.die.net/man/1/rz">rz(1)</a> binaries. Note that these binaries also support XModem and YModem, and as such adding the configurations to your system should be fairly straight forward.</p>
<p>Generally available as <codeclass="language-plaintext highlighter-rouge">lrzsz</code> under Apt or Yum type packaging.</p>
<h3id="file-transfer-protocol-configuration">File Transfer Protocol Configuration</h3>
<p>The following top-level members are available to an external protocol configuration:</p>
<ul>
<li><codeclass="language-plaintext highlighter-rouge">name</code>: Required; Display name of the protocol</li>
<li><codeclass="language-plaintext highlighter-rouge">type</code>: Required; Currently must be <codeclass="language-plaintext highlighter-rouge">external</code>. This will be expanded upon in the future with built in protocols.</li>
<li><codeclass="language-plaintext highlighter-rouge">sort</code>: Optional; Sort key. If not provided, <codeclass="language-plaintext highlighter-rouge">name</code> will be used for sorting.</li>
</ul>
<p>For protocols of type <codeclass="language-plaintext highlighter-rouge">external</code> the following members may be defined:</p>
<ul>
<li><codeclass="language-plaintext highlighter-rouge">sendCmd</code>: Required for protocols that can send (allow user downloads); The command/binary to execute.</li>
<li><codeclass="language-plaintext highlighter-rouge">sendArgs</code>: Required if using <codeclass="language-plaintext highlighter-rouge">sendCmd</code>; An array of arguments. A placeholder of <codeclass="language-plaintext highlighter-rouge">{fileListPath}</code> may be used to supply a path to a <strong>file containing</strong> a list of files to send, or <codeclass="language-plaintext highlighter-rouge">{filePaths}</code> to supply <em>1:n</em> individual file paths to send.</li>
<li><codeclass="language-plaintext highlighter-rouge">recvCmd</code>: Required for protocols that can receive (allow user uploads); The command/binary to execute.</li>
<li><codeclass="language-plaintext highlighter-rouge">recvArgs</code>: Required if using <codeclass="language-plaintext highlighter-rouge">recvCmd</code> and supporting <strong>batch</strong> uploads; An array of arguments. A placeholder of <codeclass="language-plaintext highlighter-rouge">{uploadDir}</code> may be used to supply the system provided upload directory. If <codeclass="language-plaintext highlighter-rouge">{uploadDir}</code> is not present, the system expects uploaded files to be placed in CWD which will be set to the upload directory.</li>
<li><codeclass="language-plaintext highlighter-rouge">recvArgsNonBatch</code>: Required if using <codeclass="language-plaintext highlighter-rouge">recvCmd</code> and supporting non-batch (single file) uploads; A placeholder of <codeclass="language-plaintext highlighter-rouge">{fileName}</code> may be supplied to indicate to the protocol what the uploaded file should be named (this will be collected from the user before the upload starts).</li>
<li><codeclass="language-plaintext highlighter-rouge">escapeTelnet</code>: Optional; If set to <codeclass="language-plaintext highlighter-rouge">true</code>, escape all internal Telnet related codes such as IAC’s. This option is required for external protocol handlers such as <codeclass="language-plaintext highlighter-rouge">sz</code> and <codeclass="language-plaintext highlighter-rouge">rz</code> that do not escape themselves.</li>
</ul>
<h3id="adding-your-own">Adding Your Own</h3>
<p>Take a look a the example below as well as <ahref="/core/config_default.js">core/config_default.js</a>.</p>
<h4id="example-file-transfer-protocol-configuration">Example File Transfer Protocol Configuration</h4>