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 the 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)
