SYNOPSIS
        #include <configuration.h>

        void configure_driver(int what, mixed data)

DESCRIPTION
        This efun configures runtime adjustable bahviour of the driver.

        Sets the option <what> to the value <data>.

        This function always causes the privilege_violation
        ("configure_driver", this_object(), what, data).

        <what> == DC_MEMORY_LIMIT
           Set new soft and hard memory limits for the driver.
           <data> is expected to be an array with two elements, which have to
           be integers giving the amount of memory in bytes.
           ({<soft memory limit>, <hard memory limit>})

        <what> == DC_ENABLE_HEART_BEATS
           Globally enable the calling of Heartbeats, if <data> is 1,
           globally disable them if <data> is 0.
           If called during heartbeat processing, the change comes into effect
           at the next backend cycle.

        <what> == DC_LONG_EXEC_TIME
           Set the time considered as (too) long for top-level executions. If
           an execution exceeds this time, a stack trace will be written to
           the debug log. The execution will continue at that point.
           <data> is an integer and measured in microseconds.
           A time of 0 disables the detection of long executions.

        <what> == DC_DATA_CLEAN_TIME
           Sets the average time between clean-ups of an objects data
           structures. This is not to be confused with the standard cleanup
           time which determines when H_CLEAN_UP is called. A long time for
           data cleanup may lead to larger memory consumption and prevents
           destructed objects being cleaned up. A too short time may lead to
           high loads and lag on the machine. The actual time delay will be a
           time between 0.9*DC_DATA_CLEAN_TIME and 1.1*DC_DATA_CLEAN_TIME.
           Default at driver startup are 3600s.
           <data> is an integer and measured in seconds.

        <what> == DC_TLS_CERTIFICATE
           Sets the current certificate used for new TLS sessions.
           It can be one of the certificates in the key directory
           (command line option --tls-keydirectory) or the main
           certificate (given with --tls-certfile).
           Default is the main certificate or else the first
           certificate found in the directory. The chosen certificate at the
           time of the tls_init_connection() call is used for that connection.
           <data> is a string containing the SHA1 fingerprint
           of the certificate with hexadecimal numbers,
           it may contain colons or whitespaces (for example
           "5A:FE:CA:57:1E:50:5E:1E:C7:ED:BA:11:AD:50:10:75:0F:7A:1E:50").
           When loading certificates their fingerprints are printed
           on stdout and into the logfile.

        <what> == DC_TLS_DHE_PARAMETER
           Sets new parameters for the Diffie-Hellman keyexchange for new TLS
           sessions. The paramters must be given as a PEM encoded string
           (e.g. the output of 'openssl dhparam -5 2048').
           If <data> is 0, the built-in defaults will be restored.
           If importing the new parameters fails (e.g. due to an incorrect
           format), the driver tries to keep the old parameters 

        <what> == DC_TLS_CIPHERLIST
           Sets a new list of ciphers (OpenSSL) or priorities (GnuTLS) to use.
           For the correct format, please refer to the help of 'openssl
           ciphers' or documentation of priority strings in GnuTLS.
           With GnuTLS a syntax error in the list causes an error.
           With OpenSSL an error is only raised of none of the given ciphers
           could be selected.
           By default, the preferred ciphers of the driver take precedence
           This can be changed in the priority strings for GnuTLS, but
           currently not for OpenSSL.

        <what> == DC_EXTRA_WIZINFO_SIZE
           Indicate that the wizlist should contain an array of the given size
           with extra info for each wizard. A negative value indicates
           a non-array value.

           The value is only used to allocate a proper empty 'extra' value
           for newly created wizlist entries.

        <what> == DC_DEFAULT_RUNTIME_LIMITS
           Sets the default runtime limits, that will be used for each thread.
           They will be in effect as the initial limits with the next thread.
           The limits must be given as an array with the following entries:

             int[LIMIT_EVAL]:         the max number of eval costs
             int[LIMIT_ARRAY]:        the max number of array entries
             int[LIMIT_MAPPING_SIZE]: the max number of mapping values
             int[LIMIT_MAPPING_KEYS]: the max number of mapping entries
             int[LIMIT_BYTE]:         the max number of bytes handled with
                                      one read_bytes()/write_bytes() call.
             int[LIMIT_FILE]:         the max number of bytes handled with
                                      one read_file()/write_file() call.
             int[LIMIT_CALLOUTS]:     the number of callouts at one time.
             int[LIMIT_COST]:         how to account the current cost.
             int[LIMIT_MEMROY]:       the max. number of bytes which can be 
                                        _additionally_ allocated/used
                                        _per top-level execution thread_.

          The limit settings recognize three special values:

            LIMIT_UNLIMITED:  the limit is deactivated
            LIMIT_KEEP:       the former setting is kept
            LIMIT_DEFAULT:    the 'global' default setting is used.

          For LIMIT_COST, the special values have these meaning:
            LIMIT_UNLIMITED:  at maximum 1 tick is accounted
            LIMIT_KEEP:        LIMIT_COST is set to 0
            LIMIT_DEFAULT:     LIMIT_COST is set to -100

        <what> == DC_SWAP_COMPACT_MODE
           Sets free swap space shall be reused immediately to keep
           the swap file as small as possible.
           (Same as the --swap-compact command line switch.)

        <what> == DC_SWAP_TIME
           Sets the time until the program of an unused object is swapped out
           (if possible). Setting the interval to 0 disables swapping of
           programs.
           <data> is an integer and measured in seconds.
           (Same as the --swap-time command line switch.)

        <what> == DC_SWAP_VAR_TIME
           Sets the time until the variables of an unused object are swapped
           out. Setting the interval to 0 disables swapping of variables.
           <data> is an integer and measured in seconds.
           (Same as the --swap-variables command line switch.)

        <what> == DC_CLEANUP_TIME
           Sets the time until the cleanup hook is called in unused objects.
           <data> is an integer and measured in seconds.
           (Same as the --cleanup-time command line switch.)

        <what> == DC_RESET_TIME
           Sets the default time until the reset hook is called in objects.
           The change will take effect for each object after its next reset.
           <data> is an integer and measured in seconds.
           (Same as the --reset-time command line switch.)

        <what> == DC_DEBUG_FILE
           Sets the debug log file.
           The filename can be given relative to the mudlib directory
           or absolute with regard to the operating system.
           Settings this option will force closing and reopening
           the log file (even if the name didn't change).

         <what> == DC_FILESYSTEM_ENCODING
           Sets the character encoding used in the filesystem.
           If not set, the default encoding is derived from the LC_CTYPE
           environment setting. If LC_CTYPE is not defined, or it is set to
           the "C" locale, then "UTF-8" is used as a default.

         <what> == DC_SIGACTION_SIGHUP
         <what> == DC_SIGACTION_SIGINT
         <what> == DC_SIGACTION_SIGUSR1
         <what> == DC_SIGACTION_SIGUSR2
           Sets the default action when the driver encounters those
           POSIX signals. It can be set to one of the following options:

             DCS_DEFAULT:
                 This is the default action: Call handle_external_signal()
                 in the master and act upon its result.

             DCS_IGNORE:
                 Ignore the signal.

             DCS_TERMINATE:
                 Terminate the process immediately.

             DCS_SHUTDOWN:
                 Do a graceful shutdown.

             DCS_INFORM_MASTER:
                 Call handle_external_signal(), but ignore its result.

             DCS_RELOAD_MASTER:
                 Reload the master object.

             DCS_THROW_EXCEPTION:
                 Cause an error in the currently running LPC or Python
                 function.

HISTORY
        Introduced in LDMud 3.3.719.
        DC_ENABLE_HEART_BEATS was added in 3.5.0.
        DC_LONG_EXEC_TIME was added in 3.5.0.
        DC_DATA_CLEAN_TIME was added in 3.5.0.
        DC_EXTRA_WIZINFO_SIZE was added in 3.5.0.
        DC_TLS_CERTIFICATE was added in 3.5.0.
        DC_TLS_DHE_PARAMETER was added in 3.5.0.
        DC_TLS_CIPHERLIST was added in 3.5.0.
        DC_SWAP_COMPACT_MODE was added in 3.5.0.
        DC_SWAP_TIME was added in 3.5.2
        DC_SWAP_VAR_TIME was added in 3.5.2
        DC_CLEANUP_TIME was added in 3.5.2
        DC_RESET_TIME was added in 3.5.2
        DC_DEBUG_FILE was added in 3.5.2.
        DC_SIGACTION_* were added in 3.5.2.

SEE ALSO
        configure_interactive(E)
