Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
ldmud/doc/concepts/mccp
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
100 lines (73 sloc)
4.15 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CONCEPT | |
mccp - The Mud Client Compression Protocol | |
DESCRIPTION | |
Information 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 themselves, | |
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(E) |