PRELIMINARY
SYNOPSIS
        int tls_init_connection(object ob)
        int tls_init_connection(object ob, string fun, string|object fob, mixed extra...)
        int tls_init_connection(object ob, closure fun, mixed extra...)

DESCRIPTION
        tls_init_connection() tries to start a TLS secured connection to 
        the interactive object <ob> (or this_object() if <ob> is not given).

        Result:
          errorcode < 0: unsuccessful, use tls_error() to get an useful
                         description of the error
             number > 0: the secure connection is still being set up in the
                          background
            number == 0: the secure connection is active.
        
        OpenSSL only:

            If the callback <fun>/<fun>:<fob> is specified, it will be called
            once the fate of the secure connection has been determined. The
            first argument will be the return code from the handshake
            (errorcode < 0 on failure, or 0 on success), followed by the
            interactive object <ob> and any <extra> arguments.

        If the TLS setup fails, it is not necessary to call
        tls_deinit_connection().

        IMPORTANT: During the TLS handshake nothing else must be sent
        to the client! For the most cases (TLS-capable clients logging in)
        this means that the TLS handshake is the first and only thing the
        client gets to see while the handshake is in progress.

        The driver automatically suppresses the printing of the prompt
        while the TLS handshake is in progress.

        If tls_init_connection() is called in the master::connect() function,
        the driver will either call the set callback in place of logon(), or
        if not callback has been set, delay the call of logon() until the
        state of the connection is clear.

HISTORY
        Introduced in LDMud 3.3.474 and following, backported to 3.2.11.
        LDMud 3.2.13/3.3.713 streamlined the handling of secure connections
        during logon.

SEE ALSO
        tls_deinit_connection(E), tls_error(E), tls_query_connection_state(E),
        tls_query_connection_info(E), tls_available(E),
        tls_check_certificate(E), tls_refresh_certs(E), connect(M), logon(A)
