CONCEPT
        intermud.basic

DESCRIPTION
        Here is how intermud data is sent across the internet - specific
        for Zebedee Intermud (aka Intermud 2).

ADVANCED PROTOCOL
        This file was originally written as a brief outline of the intermud
        protocol for use by developers interested in incorperating similar,
        compatible intermud protocols into their own mud systems. It is
        included here as it provides a much more detailed description of the
        intermud protocol than that provided by the original PROTOCOL file,
        and hence may be of use to LpMud developers. 

PACKET PROTOCOL / FORMAT
        All information is transferred as a string via a UDP port (each mud
        has 1 send and 1 receive port). This kindof transfer is inherently
        unreliable, but it's fast and doesn't use up file descriptors.
        The format of the strings (packets) is as follows: 

           header1:body1|headerN:bodyN|DATA:body-data

        In other words, a header name, followed by a : and then the data
        associated with this header. Each header/body pair is separated by
        the | character. This means that headers and their body cannot
        contain the | character. You should check for this in outgoing
        packets to aviod decoding errors at the recieving end. The exception
        to this is the DATA field. If it is present, it is ALWAYS positioned
        at the end of the packet. Once a DATA header is found, everything
        following it is interpreted as the body of the DATA field. This
        means it can contain special characters without error and it is
        used to carry the main body or data of all packets. 

        By convention, predefined system fields will use capital letters for
        field headers and custom headers used by specific applications will
        use lowercase names to avoid clashes. The defined system fields are
        generally refered to by a set of macros which are defined in a
        common header file for clarity. 

        There is one exception to this header format; If the data is too
        large to be transmitted in one single packet, it will be split into
        packets of convenient size, each with a special unique packet header
        to enable them to be reassembled at the receiving end. These
        headers are of the format: 

          PKT:mudname:packet-id:packet-number/total-packets|rest-of-packet

        In this case, the mudname and packet-id combine to form a unique id
        for the packet. The packet-number and total-packets information is
        used to determine when all buffered packets have been received. The
        rest-of-packet part is not parsed, but is stored while the receiver
        awaits the other parts of the packet. When/if all parts have been
        received they are concatenated and decoded as a normal packet. 

PACKET ENCODING / DECODING
        Only 2 generic data types are fully suported within the inetd code
        itself (namely strings and integers), though others can easily be
        used by converting them to one of the supported data types before
        transfer and converting back again in receipt. The LpMud "object"
        data type is converted to a string automatically by the inetd on
        encoding, but no such conversion is carried out on decoding. 

        On encoding integers are simply converted to a corresponding string.
        Strings are left untouched as long as there is no ambiguity as to
        wether they should be decoded as a string or an integer. In this
        case of ambiguity, the string is prepended with a $ character. If
        the first character of a string is the $ character, it is escaped
        by prepending another $ character. On decoding, any string with a $
        as its first character will have it removed and will then be treated
        as a string. Any remaining strings that can be converted to an
        integer and then back to a string with no loss of information are
        considered to be integers. Any remaining strings are treated as
        such and are left unaltered. 

DEFINED SYSTEM HEADERS
        "RCPNT" (RECIPIENT)
            The body of this field should contiain the recipient the message
            is to be sent to if applicable. 
        "REQ" (REQUEST)
            The name of the intermud request that is being made of the
            receiving mud. Standard requests that should be supported by
            all systems are "ping" (PING), "query" (QUERY), and "reply"
            (REPLY). The PING request is used to determine wether or not a
            mud is active. The QUERY request is used to query a remote mud
            for information about itself (look at the udp/query module for
            details of what information can be requested). The REPLY request
            is special in that it is the request name used for all replies
            made to by mud B to an initial request made by a mud A. It is
            mud A's responsibility to keep track of the original request
            type so that the reply can be handled appropriately. 
        "SND" (SENDER)
            The name of the person or object which sent the request or to
            whom replies should be directed. This is essential if a reply
            is expected. 
        "DATA" (DATA)
            This field should contain the main body of any packet. It is
            the only field that can contain special delimiting characters
            without error. 

        The following headers are used internally by the inetd and should
        not be used by external objects: 
        "HST" (HOST)
            The IP address of the host from which a request was received.
            This is set by the receiving mud and is not contained in
            outgoing packets. 
        "ID" (ID)
            The packet id. This field is simply an integer which is set by
            the sending inetd. The number is incremented each time a packet
            is sent (zero is never used). This field is only needed if a
            reply is expected. REPLY packets _must_ include the original
            request id. This is _not_ done by the inetd. 
        "NAME" (NAME)
            The name of the local mud. Used for security checking and to
            update host list information. 
        "PKT" (PACKET)
            A special header reserved for packets which have been split.
            See PACKET PROTOCOL / FORMAT. 
        "UDP" (UDP_PORT)
            The UDP port the local mud is receiving on. Used for security
            checking and updating host list information. 
        "SYS" (SYSTEM)
            Contains special system flags. The only system flag used at
            present is TIME_OUT. This is included in packets returned due
            to an expected reply timing out to differentiate it from an
            actual reply. 

UDP REQUESTS / MODULES
        The following are standard request types that must be supported
        by all systems: 
        "ping" (PING)
            This module should return a REPLY packet that contains the
            original requests ID in it's ID field and the SENDER in it's
            RECIPIENT field. It should also include an appropriate string
            in the DATA field, eg. "Mud-Name is alive.\n" 
        "query" (QUERY)
            This module expects the type of query requested to appear in the
            recieved DATA field. It should return a REPLY packet containing
            the original ID in the ID field, the SENDER in it's RECIPIENT
            field, and the query type in a QUERY field. The DATA field should
            contain the information requested. 

        For details of how other intermud requests operate, look at the
        relevant module code. 

AUTHOR
        Information taken from Outerspaces documentation to be found 
        on http://mud.stack.nl/intermud/

SEE ALSO
        inetd(C), intermud(C)
