Go forward to File Transfer Control.
Go backward to Accepting a Call.
Go up to sys File.

Protocol Selection
------------------

`protocol STRING'
     Specifies which protocols to use for the other system, and in which
     order to use them.  This would not normally be used.  For example,
     `protocol tfg'.

     The default depends on the characteristics of the port and the
     dialer, as specified by the `seven-bit' and `reliable' commands.
     If neither the port nor the dialer use either of these commands,
     the default is to assume an eight-bit reliable connection.  The
     commands `seven-bit true' or `reliable false' might be used in
     either the port or the dialer to change this.  Each protocol has
     particular requirements that must be met before it will be
     considered during negotiation with the remote side.

     The `t' and `e' protocols are intended for use over TCP or some
     other communication path with end to end reliability, as they do no
     checking of the data at all.  They will only be considered on a
     TCP port which is both reliable and eight bit.  For technical
     details, see See t Protocol, and See e Protocol.

     The `i' protocol is a bidirectional protocol.  It requires an
     eight-bit connection.  It will run over a half-duplex link, such as
     Telebit modems in PEP mode, but for efficient use of such a
     connection you must use the `half-duplex' command (*note port
     File::.).  See i Protocol.

     The `g' protocol is robust, but requires an eight-bit connection.
     See g Protocol.

     The `G' protocol is the System V Release 4 version of the `g'
     protocol.  See Big G Protocol.

     The `a' protocol is a Zmodem like protocol, contributed by Doug
     Evans.  It requires an eight-bit connection, but unlike the `g' or
     `i' protocol it will work if certain control characters may not be
     transmitted.

     The `j' protocol is a variant of the `i' protocol which can avoid
     certain control characters.  The set of characters it avoids can
     be set by a parameter.  While it technically does not require an
     eight bit connection (it could be configured to avoid all
     characters with the high bit set) it would be very inefficient to
     use it over one.  It is useful over a eight-bit connection that
     will not transmit certain control characters.  See j Protocol.

     The `f' protocol is intended for use with X.25 connections; it
     checksums each file as a whole, so any error causes the entire
     file to be retransmitted.  It requires a reliable connection, but
     only uses seven-bit transmissions.  It is a streaming protocol,
     so, while it can be used on a serial port, the port must be
     completely reliable and flow controlled; many aren't.  *Note f
     Protocol::.

     The `v' protocol is the `g' protocol as used by the DOS program
     UUPC/Extended.  It is provided only so that UUPC/Extended users
     can use it; there is no particular reason to select it.  *Note v
     Protocol::.

     The `y' protocol is an efficient streaming protocol.  It does error
     checking, but when it detects an error it immediately aborts the
     connection.  This requires a reliable, flow controlled, eight-bit
     connection.  In practice, it is only useful on a connection that is
     nearly always error-free.  Unlike the `t' and `e' protocols, the
     connection need not be entirely error-free, so the `y' protocol
     can be used on a serial port.  See y Protocol.

     The protocols will be considered in the order shown above.  This
     means that if neither the `seven-bit' nor the `reliable' command
     are used, the `t' protocol will be used over a TCP connection and
     the `i' protocol will be used over any other type of connection
     (subject, of course, to what is supported by the remote system; it
     may be assumed that all systems support the `g' protocol).

     Note that currently specifying both `seven-bit true' and `reliable
     false' will not match any protocol.  If this occurs through a
     combination of port and dialer specifications, you will have to
     use the `protocol' command for the system or no protocol will be
     selected at all (the only reasonable choice would be `protocol f').

     A protocol list may also be specified for a port (*note port
     File::.), but, if there is a list for the system, the list for the
     port is ignored.

`protocol-parameter CHARACTER STRING ...'
     CHARACTER is a single character specifying a protocol.  The
     remaining strings are a command specific to that protocol which
     will be executed if that protocol is used.  A typical command is
     something like `window 7'.  The particular commands are protocol
     specific.

     The `i' protocol supports the following commands, all of which take
     numeric arguments:

    `window'
          The window size to request the remote system to use.  This
          must be between 1 and 16 inclusive.  The default is 16.

    `packet-size'
          The packet size to request the remote system to use.  This
          must be between 1 and 4095 inclusive.  The default is 1024.

    `remote-packet-size'
          If this is between 1 and 4095 inclusive, the packet size
          requested by the remote system is ignored, and this is used
          instead.  The default is 0, which means that the remote
          system's request is honored.

    `sync-timeout'
          The length of time, in seconds, to wait for a SYNC packet
          from the remote system.  SYNC packets are exchanged when the
          protocol is started.  The default is 10.

    `sync-retries'
          The number of times to retry sending a SYNC packet before
          giving up.  The default is 6.

    `timeout'
          The length of time, in seconds, to wait for an incoming
          packet before sending a negative acknowledgement.  The
          default is 10.

    `retries'
          The number of times to retry sending a packet or a negative
          acknowledgement before giving up and closing the connection.
          The default is 6.

    `errors'
          The maximum number of errors to permit before closing the
          connection.  The default is 100.

    `error-decay'
          The rate at which to ignore errors.  Each time this many
          packets are received, the error count is decreased by one, so
          that a long connection with an occasional error will not
          exceed the limit set by `errors'.  The default is 10.

    `ack-frequency'
          The number of packets to receive before sending an
          acknowledgement.  The default is half the requested window
          size, which should provide good performance in most cases.

     The `g', `G' and `v' protocols support the following commands, all
     of which take numeric arguments, except `short-packets' which
     takes a boolean argument:

    `window'
          The window size to request the remote system to use.  This
          must be between 1 and 7 inclusive.  The default is 7.

    `packet-size'
          The packet size to request the remote system to use.  This
          must be a power of 2 between 32 and 4096 inclusive.  The
          default is 64 for the `g' and `G' protocols and 1024 for the
          `v' protocol.  Many older UUCP packages do not support packet
          sizes larger than 64, and many others do not support packet
          sizes larger than 128.  Some UUCP packages will even dump
          core if a larger packet size is requested.  The packet size
          is not a negotiation, and it may be different in each
          direction.  If you request a packet size larger than the
          remote system supports, you will not be able to send any
          files.

    `startup-retries'
          The number of times to retry the initialization sequence.
          The default is 8.

    `init-retries'
          The number of times to retry one phase of the initialization
          sequence (there are three phases).  The default is 4.

    `init-timeout'
          The timeout in seconds for one phase of the initialization
          sequence.  The default is 10.

    `retries'
          The number of times to retry sending either a data packet or
          a request for the next packet.  The default is 6.

    `timeout'
          The timeout in seconds when waiting for either a data packet
          or an acknowledgement.  The default is 10.

    `garbage'
          The number of unrecognized bytes to permit before dropping the
          connection.  This must be larger than the packet size.  The
          default is 10000.

    `errors'
          The number of errors (malformed packets, out of order
          packets, bad checksums, or packets rejected by the remote
          system) to permit before dropping the connection.  The
          default is 100.

    `error-decay'
          The rate at which to ignore errors.  Each time this many
          packets are received, the error count is decreased by one, so
          that a long connection with an occasional error will not
          exceed the limit set by `errors'.  The default is 10.

    `remote-window'
          If this is between 1 and 7 inclusive, the window size
          requested by the remote system is ignored and this is used
          instead.  This can be useful when dealing with some poor UUCP
          packages.  The default is 0, which means that the remote
          system's request is honored.

    `remote-packet-size'
          If this is between 32 and 4096 inclusive the packet size
          requested by the remote system is ignored and this is used
          instead.  There is probably no good reason to use this.  The
          default is 0, which means that the remote system's request is
          honored.

    `short-packets'
          If this is true, then the code will optimize by sending
          shorter packets when there is less data to send.  This
          confuses some UUCP packages, such as System V Release 4 (when
          using the `G' protocol) and Waffle; when connecting to such a
          package, this parameter must be set to false.  The default is
          true for the `g' and `v' protocols and false for the `G'
          protocol.

     The `a' protocol is a Zmodem like protocol contributed by Doug
     Evans.  It supports the following commands, all of which take
     numeric arguments except for `escape-control', which takes a
     boolean argument:

    `timeout'
          Number of seconds to wait for a packet to arrive.  The
          default is 10.

    `retries'
          The number of times to retry sending a packet.  The default
          is 10.

    `startup-retries'
          The number of times to retry sending the initialization
          packet.  The default is 4.

    `garbage'
          The number of garbage characters to accept before closing the
          connection.  The default is 2400.

    `send-window'
          The number of characters that may be sent before waiting for
          an acknowledgement.  The default is 1024.

    `escape-control'
          Whether to escape control characters.  If this is true, the
          protocol may be used over a connection which does not
          transmit certain control characters, such as `XON' or `XOFF'.
          The connection must still transmit eight bit characters
          other than control characters.  The default is false.

     The `j' protocol can be used over an eight bit connection that will
     not transmit certain control characters.  It accepts the same
     protocol parameters that the `i' protocol accepts, as well as one
     more:

    `avoid'
          A list of characters to avoid.  This is a string which is
          interpreted as an escape sequence (see Chat Scripts.).
          The protocol does not have a way to avoid printable ASCII
          characters (byte values from 32 to 126, inclusive); only
          ASCII control characters and eight-bit characters may be
          avoided.  The default value is `\021\023'; these are the
          characters `XON' and `XOFF', which many connections use for
          flow control.  If the package is configured to use
          `HAVE_BSD_TTY', then on some versions of Unix you may have to
          avoid `\377' as well, due to the way some implementations of
          the BSD terminal driver handle signals.

     The `f' protocol is intended for use with error-correcting modems
     only; it checksums each file as a whole, so any error causes the
     entire file to be retransmitted.  It supports the following
     commands, both of which take numeric arguments:

    `timeout'
          The timeout in seconds before giving up.  The default is 120.

    `retries'
          How many times to retry sending a file.  The default is 2.

     The `t' and `e' protocols are intended for use over TCP or some
     other communication path with end to end reliability, as they do no
     checking of the data at all.  They both support a single command,
     which takes a numeric argument:

    `timeout'
          The timeout in seconds before giving up.  The default is 120.

     The `y' protocol is a streaming protocol contributed by Jorge Cwik.
     It supports the following commands, both of which take numeric
     arguments:

    `timeout'
          The timeout in seconds when waiting for a packet.  The
          default is 60.

    `packet-size'
          The packet size to use.  The default is 1024.

     The protocol parameters are reset to their default values after
     each call.