CONCEPT
        mccp - The Mud Client Compression Protocol

DESCRIPTION
        Informations and code taken from the MCCP Homepage
        http://www.randomly.org/projects/MCCP/

        MCCP is implemented as a Telnet option [RFC854, RFC855]. The server
        and client negotiate the use of MCCP as they would any other telnet
        option. Once agreement has been reached on the use of the option,
        option subnegotiation is used to determine acceptable compression
        methods to use, and to indicate the start of a compressed data stream. 

        If the driver is compiled with MCCP Support there is a
        define __MCCP__.

        The driver currently supports both versions of mccp. If your mud
        has a H_NOECHO hook you have to find out if the client supports
        mccp. Without this hook you still have to start neogotiation.

        All sub-negotiation is done by the efuns start_mccp_compress() and
        end_mccp_compress() whether you have this hook or not.

        Notice: when the client uses compressions all binary_message calls
                are executed with flag=3. This is because writing to the
                socket would disturb zlib stream.
        
        mccp-efuns:

          start_mccp_compress(int telopt) (only needed with H_NOECHO)
          end_mccp_compress(int telopt)   (only needed with H_NOECHO)
          query_mccp(object player)
          query_mccp_stats(object player)

       Initiating MCCP without H_NOECHO hook:

          if(!query_mccp()){
            binary_message(({ IAC, WILL, TELOPT_COMPRESS2 }),1)
            binary_message(({ IAC, WILL, TELOPT_COMPRESS }),1)
          }

          the driver will parse the clients answers and start compression.
          (The connection might already be compressed, because although the
           documentation says clients should not negotiate from themselfes,
           zmud e.g. does.)

          You can start and stop compression manually by efuns
          when you are sure client supports compression :)


       Initiating MCCP compression with H_NOECHO hook:

          If your mudlib uses the H_NOECHO driver-hook you decided to do
          all the negotiation by yourself:

          Server Commands
          IAC WILL COMPRESS indicates the sender supports version 1 of the
                            protocol, and is willing to compress data it sends. 

          IAC WILL COMPRESS2 indicates the sender supports version 2, and is
                             willing to compress data it sends. 

          IAC WONT COMPRESS indicates the sender refuses to compress data using
                            version 1. 

          IAC WONT COMPRESS2 indicates the sender refuses to compress data
                             using version 2. 

          Client Commands
          IAC DO COMPRESS indicates the sender supports version 1 of the
                          protocol, and is willing to decompress data received. 

          IAC DO COMPRESS2 indicates the sender supports version 2 or above,
                           and is willing to decompress data received. 

          IAC DONT COMPRESS indicates the sender refuses to support version 1.
                            If compression was previously negotiated and is
                            currently being used, the server should terminate
                            compression. 

          IAC DONT COMPRESS2 indicates the sender refuses to support version 2.
                             If compression was previously negotiated and is
                             currently being used, the server should terminate
                             compression

          After you found out whether the client supports mccp or not you can
          start compression with start_mccp_compress(TELOPT_COMPRESS2) or
          start_mccp_compress(TELOPT_COMPRESS). ( you could start it without
          checking but some players would protest :) )

AUTHOR
        Bastian Hoyer (dafire@ff.mud.de) (some text taken from project page)

HISTORY
        Added in LDMud 3.3.447, backported to LDMud 3.2.10.

SEE ALSO
        start_mccp_compress(E), end_mccp_compress(E), query_mccp(E),
        query_mccp_stats(object player)

