SYNOPSIS
        #include <sys/driver_hooks.h>

        set_driver_hook(H_TELNET_NEG, value)

        <value> being:

          void|mixed <name>(int action, int option [, int * opts ] )
          void|mixed <closure>(int action, int option [, int * opts ] )

DESCRIPTION
        Optional hook to specifiy how to perform a single telnet
        negotiation.  Hook setting may be any closure or a string.  If
        not set, most telnet options are rejected (read: only a very
        minimal negotiation takes place).

        The hook is called whenever the driver receives a demand for
        option negotiation for any option the driver does not handle itself.
        By default, the driver deals with the following options:
            TELOPT_ECHO:      Echo option
            TELOPT_SGA:       Suppress Go Ahead (nearly always on)
            TELOPT_COMPRESS:  Mud client compression protocol (obsolete)
            TELOPT_COMPRESS2: Mud client compression protocol V2

        For all other telnet options negotiations, this hook is called.

        The hook has then to perform the negotiation using the efun
        binary_message().

        Alternatively, if H_NOECHO is set, this hook is called for
        _all_ telnet data received.

        If the setting is a string, it used as name of an lfun to call
        in this_player(). Closures are just called, with unbound
        lambda-closures being bound to this_player() prior to
        execution.

        The hook is called for a 'DO/DONT/WILL/WONT <opt>' with the action
        (DO/DONT/...) as the first, and <opt> as the second argument.

        For example:, if the driver receives the sequence

          IAC SB <opt> <opts>...

        followed by IAC SB/SE,  the hook is called with 'SB' as first
        argument, <opt> as second, and <opts> as an array of integers as
        third argument.

REMARKS
        An incomplete list of telnet negotiations this hook is called
        for includes the following:
            SB:               Suboption negotiation
            TELOPT_LINEMODE:  linemode
            TELOPT_NAWS:      window size
            TELOPT_TTYPE:     terminal type
            TELOPT_TM:        timing mark
            TELOPT_NEWENV:    remote environment variables
            TELOPT_ENVIRON:   remote environment variables
            TELOPT_XDISPLOC:  remote X display address
            TELOPT_TSPEED:    terminal speed
            TELOPT_BINARY:    binary data, needed for non-ASCII charsets
            TELOPT_EOR:       TinyFugue prompt marker (together with EOR)

            TELOPT_MSP:       Mud Sound Protocol
            TELOPT_MXP:       Mud Extension Protocol
            TELOPT_MSSP:      Mud Server Status Protocol
            TELOPT_GMCP:      Generic Mud Communication Protocol

HISTORY

SEE ALSO
        hooks(C), telnet(C), no_echo(H)
