PRELIMINARY
CONCEPT
        tls (transport layer security)

DESCRIPTION
        TLS stands for Transport Layer Security which is the successor
        of the well known SSL (Secure Socket Layer). Both techniques
        provide a way to authenticate and encrypt the data send through
        a network connection.

        By enabling TLS during compilation of the driver you can provide
        a secure channel into the mud to your players.

        In difference to other solutions as "sslwrap" or "stunnel" the
        driver integrated approach has the advantage that the mud sees
        the real IP of the player, not the IP of the local mud host.

USAGE
        To use TLS configure your driver with --enable-tls option.
        After starting your driver you have five new efuns
        (tls_init_connection(), tls_deinit_connection(), tls_error(),
        tls_query_connection_info(), tls_query_connection_state()).

        You can switch on TLS by calling tls_init_connection().
        This can happen in three ways:

        1) in telnet_neg()

            Advantage of this method is that you can offer TLS on a normal
            mud port. If you have a limited number of ports this can
            become important. The TLS connection will be started by
            the client with help of telnet option STARTTLS. Currently
            there are no mudclients that support this method.

            You will have to implement the telnet option STARTTLS (46) for
            this method. The draft for this can be found here:
            http://www.ietf.org/proceedings/99mar/I-D/draft-ietf-tn3270e-telnet-tls-01.txt
            Call tls_init_connection() to initiate the TLS handshake.


        2) in master_ob->connect()

            Advantage of this method is that your users can connect with
            any program that supports TLS/SSL. Examples are telnet-ssl,
            sslwrap or stunnel. Disadvantage is that you have to spend
            a dedicated port for this.

            You have to call tls_init_connection() as first command
            after the player connected (normally in master_ob->connect())

        3) in an interactive object using a callback.

            This method is similar to method (1), but not limited to
            telnet: it is useful for implementing protocols that use
            STARTTLS like SMTP or IMAP. tls_init_connection() can be
            called at any time by the interactive object.

            You must not write to the connection after calling this
            efun until the callback is executed (the prompt will
            be supressed automatically during this time).

        To test your code, you can use the openssl binary.
        `openssl s_client -connect host:port' should display your certificate
        and anything you write after the callback is executed. If you
        encounter the error message `SSL3_GET_RECORD: wrong version number'
        you're probably writing to the connection while you should not.

BUG
        This manpage might be not quite up to date with the implementation.

HISTORY
        Introduced in LDMud 3.3.474 and following, backported to 3.2.11.

SEE ALSO
        tls_* efuns
