ldmud-3.2.9/doc/
ldmud-3.2.9/doc/efun/
ldmud-3.2.9/mud/
ldmud-3.2.9/mud/heaven7/
ldmud-3.2.9/mud/heaven7/lib/
ldmud-3.2.9/mud/lp-245/
ldmud-3.2.9/mud/lp-245/banish/
ldmud-3.2.9/mud/lp-245/doc/
ldmud-3.2.9/mud/lp-245/doc/examples/
ldmud-3.2.9/mud/lp-245/doc/sefun/
ldmud-3.2.9/mud/lp-245/log/
ldmud-3.2.9/mud/lp-245/obj/Go/
ldmud-3.2.9/mud/lp-245/players/lars/
ldmud-3.2.9/mud/lp-245/room/death/
ldmud-3.2.9/mud/lp-245/room/maze1/
ldmud-3.2.9/mud/lp-245/room/sub/
ldmud-3.2.9/mud/lp-245/secure/
ldmud-3.2.9/mud/morgengrauen/
ldmud-3.2.9/mud/morgengrauen/lib/
ldmud-3.2.9/mud/sticklib/
ldmud-3.2.9/mud/sticklib/src/
ldmud-3.2.9/mudlib/uni-crasher/
ldmud-3.2.9/pkg/
ldmud-3.2.9/pkg/debugger/
ldmud-3.2.9/pkg/diff/
ldmud-3.2.9/pkg/misc/
ldmud-3.2.9/src/autoconf/
ldmud-3.2.9/src/bugs/
ldmud-3.2.9/src/bugs/MudCompress/
ldmud-3.2.9/src/bugs/b-020916-files/
ldmud-3.2.9/src/bugs/doomdark/
ldmud-3.2.9/src/bugs/ferrycode/ferry/
ldmud-3.2.9/src/bugs/ferrycode/obj/
ldmud-3.2.9/src/bugs/psql/
ldmud-3.2.9/src/done/
ldmud-3.2.9/src/done/order_alist/
ldmud-3.2.9/src/done/order_alist/obj/
ldmud-3.2.9/src/done/order_alist/room/
ldmud-3.2.9/src/gcc/
ldmud-3.2.9/src/gcc/2.7.0/
ldmud-3.2.9/src/gcc/2.7.1/
ldmud-3.2.9/src/hosts/
ldmud-3.2.9/src/hosts/GnuWin32/
ldmud-3.2.9/src/hosts/amiga/NetIncl/
ldmud-3.2.9/src/hosts/amiga/NetIncl/netinet/
ldmud-3.2.9/src/hosts/amiga/NetIncl/sys/
ldmud-3.2.9/src/hosts/i386/
ldmud-3.2.9/src/hosts/msdos/byacc/
ldmud-3.2.9/src/hosts/msdos/doc/
ldmud-3.2.9/src/hosts/os2/
ldmud-3.2.9/src/hosts/win32/
ldmud-3.2.9/src/util/
ldmud-3.2.9/src/util/erq/
ldmud-3.2.9/src/util/indent/hosts/next/
ldmud-3.2.9/src/util/xerq/
ldmud-3.2.9/src/util/xerq/lpc/
ldmud-3.2.9/src/util/xerq/lpc/www/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">



<html>

<head>

<link rev=made href="mailto:icecube$ihug.co.nz">

<title>Mud Client Compression Protocol - Specificotian</title>

</head>



<body>

<h1 align="center">The Mud Client Compression Protocol - Specification</h1>



<p>The protocol used by mcclient is based on 'telnet' option negotiation. See

RFCs <a href="http://www.freesoft.org/CIE/RFC/854/index.htm">854</a> and

<a href="http://www.freesoft.org/CIE/RFC/855/index.htm">855</a> for an

overview of the mechanism used.



<p>Compression is currently unidirectional - only output from the mud server

is compressed. This simplifies the implementation, and also avoids potential

problems with hostile clients sending data intended to cause problems (via

crashing or excessive memory/cpu use) with the decompressor. The compressor

is entirely controlled by the server. While attacks on the client are

potentially possible, this seems less of a problem as the client is not a

shared resource.



<p>To indicate it supports compression, the server sends an

<code><em>IAC WILL COMPRESS</em></code> sequence. The

<code><em>COMPRESS</em></code> option (unofficial and completely arbitary) is

option 85.



<p>The client, if it wishes to enable compression, responds with

<code><em>IAC DO COMPRESS</em></code>.



<p>The server, once <code><em>IAC DO COMPRESS</em></code> is received, may then

turn on compression. Since the start point of the compression stream needs to

be known, the server prefixes the start of the stream with a suboption

negotiation packet - <code><em>IAC SB COMPRESS WILL SE</em></code>.

Immediately following this, a zlib stream (as defined in

<a href="http://www.freesoft.org/CIE/RFC/Orig/rfc1950.txt">RFC 1950</a> - see

also the <a href="http://www.cdrom.com/pub/infozip/zlib/">zlib home page</a>)

begins.



<p>Compression can only be terminated by the server - a normal end to the

compression stream is assumed to mean "revert to uncompressed mode". It may

be desirable for the server to automatically terminate compression when

an <code><em>IAC DONT COMPRESS</em></code> sequence is received from the

client.



<p>Any decompression errors are unrecoverable, and should result in a

disconnection. Given that TCP is a reliable transport mechanism, bug-free

implementations should never encounter compression errors, so this should

not affect normal operation. When an error _is_ encountered, something has

gone badly wrong, and it seems hard to recover. Allowing raw (uncompressed)

telnet negotiation to reset compression is one possibility, but requires

escaping of all compressed data sent.



<p>Feel free to contact me with any questions about the protocol.



<p><address>Oliver Jowett

   &lt;<a href="mailto:icecube$ihug.co.nz">icecube$ihug.co.nz</a>&gt;,

   98/12/03.</address>



<hr>



<p><a href="http://validator.w3.org">

   <img border=0 src="http://validator.w3.org/images/vh32.gif"

    alt="Valid HTML 3.2!" height=31 width=88 align=left></a>



<p align="right"><a href="http://vancouver-webpages.com/CacheNow/">

<img src="../cache_now.gif" alt="Cache Now!" width=100 height=31></a>



<p align="center">

  <a href="mailto:icecube$ihug.co.nz">[Mail me]</a>

  <a href="index.html">[Up]</a>



</body>

</html>