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)
