| 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) |
| |