123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- .\" -*- nroff -*-
- .\" manual page [] for chat 1.8
- .\" $Id: chat.8,v 1.11 2004/11/13 12:22:49 paulus Exp $
- .\" SH section heading
- .\" SS subsection heading
- .\" LP paragraph
- .\" IP indented paragraph
- .\" TP hanging label
- .TH CHAT 8 "22 May 1999" "Chat Version 1.22"
- .SH NAME
- chat \- Automated conversational script with a modem
- .SH SYNOPSIS
- .B chat
- [
- .I options
- ]
- .I script
- .SH DESCRIPTION
- .LP
- The \fIchat\fR program defines a conversational exchange between the
- computer and the modem. Its primary purpose is to establish the
- connection between the Point-to-Point Protocol Daemon (\fIpppd\fR) and
- the remote's \fIpppd\fR process.
- .SH OPTIONS
- .TP
- .B \-f \fI<chat file>
- Read the chat script from the chat \fIfile\fR. The use of this option
- is mutually exclusive with the chat script parameters. The user must
- have read access to the file. Multiple lines are permitted in the
- file. Space or horizontal tab characters should be used to separate
- the strings.
- .TP
- .B \-t \fI<timeout>
- Set the timeout for the expected string to be received. If the string
- is not received within the time limit then the reply string is not
- sent. An alternate reply may be sent or the script will fail if there
- is no alternate reply string. A failed script will cause the
- \fIchat\fR program to terminate with a non-zero error code.
- .TP
- .B \-r \fI<report file>
- Set the file for output of the report strings. If you use the keyword
- \fIREPORT\fR, the resulting strings are written to this file. If this
- option is not used and you still use \fIREPORT\fR keywords, the
- \fIstderr\fR file is used for the report strings.
- .TP
- .B \-e
- Start with the echo option turned on. Echoing may also be turned on
- or off at specific points in the chat script by using the \fIECHO\fR
- keyword. When echoing is enabled, all output from the modem is echoed
- to \fIstderr\fR.
- .TP
- .B \-E
- Enables environment variable substitution within chat scripts using the
- standard \fI$xxx\fR syntax.
- .TP
- .B \-v
- Request that the \fIchat\fR script be executed in a verbose mode. The
- \fIchat\fR program will then log the execution state of the chat
- script as well as all text received from the modem and the output
- strings sent to the modem. The default is to log through the SYSLOG;
- the logging method may be altered with the \-S and \-s flags.
- .TP
- .B \-V
- Request that the \fIchat\fR script be executed in a stderr verbose
- mode. The \fIchat\fR program will then log all text received from the
- modem and the output strings sent to the modem to the stderr device. This
- device is usually the local console at the station running the chat or
- pppd program.
- .TP
- .B \-s
- Use stderr. All log messages from '\-v' and all error messages will be
- sent to stderr.
- .TP
- .B \-S
- Do not use the SYSLOG. By default, error messages are sent to the
- SYSLOG. The use of \-S will prevent both log messages from '\-v' and
- error messages from being sent to the SYSLOG.
- .TP
- .B \-T \fI<phone number>
- Pass in an arbitrary string, usually a phone number, that will be
- substituted for the \eT substitution metacharacter in a send string.
- .TP
- .B \-U \fI<phone number 2>
- Pass in a second string, usually a phone number, that will be
- substituted for the \eU substitution metacharacter in a send string.
- This is useful when dialing an ISDN terminal adapter that requires two
- numbers.
- .TP
- .B script
- If the script is not specified in a file with the \fI\-f\fR option then
- the script is included as parameters to the \fIchat\fR program.
- .SH CHAT SCRIPT
- .LP
- The \fIchat\fR script defines the communications.
- .LP
- A script consists of one or more "expect\-send" pairs of strings,
- separated by spaces, with an optional "subexpect\-subsend" string pair,
- separated by a dash as in the following example:
- .IP
- ogin:\-BREAK\-ogin: ppp ssword: hello2u2
- .LP
- This line indicates that the \fIchat\fR program should expect the string
- "ogin:". If it fails to receive a login prompt within the time interval
- allotted, it is to send a break sequence to the remote and then expect the
- string "ogin:". If the first "ogin:" is received then the break sequence is
- not generated.
- .LP
- Once it received the login prompt the \fIchat\fR program will send the
- string ppp and then expect the prompt "ssword:". When it receives the
- prompt for the password, it will send the password hello2u2.
- .LP
- A carriage return is normally sent following the reply string. It is not
- expected in the "expect" string unless it is specifically requested by using
- the \er character sequence.
- .LP
- The expect sequence should contain only what is needed to identify the
- string. Since it is normally stored on a disk file, it should not contain
- variable information. It is generally not acceptable to look for time
- strings, network identification strings, or other variable pieces of data as
- an expect string.
- .LP
- To help correct for characters which may be corrupted during the initial
- sequence, look for the string "ogin:" rather than "login:". It is possible
- that the leading "l" character may be received in error and you may never
- find the string even though it was sent by the system. For this reason,
- scripts look for "ogin:" rather than "login:" and "ssword:" rather than
- "password:".
- .LP
- A very simple script might look like this:
- .IP
- ogin: ppp ssword: hello2u2
- .LP
- In other words, expect ....ogin:, send ppp, expect ...ssword:, send hello2u2.
- .LP
- In actual practice, simple scripts are rare. At the vary least, you
- should include sub-expect sequences should the original string not be
- received. For example, consider the following script:
- .IP
- ogin:\-\-ogin: ppp ssword: hello2u2
- .LP
- This would be a better script than the simple one used earlier. This would look
- for the same login: prompt, however, if one was not received, a single
- return sequence is sent and then it will look for login: again. Should line
- noise obscure the first login prompt then sending the empty line will
- usually generate a login prompt again.
- .SH COMMENTS
- Comments can be embedded in the chat script. A comment is a line which
- starts with the \fB#\fR (hash) character in column 1. Such comment
- lines are just ignored by the chat program. If a '#' character is to
- be expected as the first character of the expect sequence, you should
- quote the expect string.
- If you want to wait for a prompt that starts with a # (hash)
- character, you would have to write something like this:
- .IP
- # Now wait for the prompt and send logout string
- .br
- \&'# ' logout
- .LP
- .SH SENDING DATA FROM A FILE
- If the string to send starts with an at sign (@), the rest of the
- string is taken to be the name of a file to read to get the string to
- send. If the last character of the data read is a newline, it is
- removed. The file can be a named pipe (or fifo) instead of a regular
- file. This provides a way for \fBchat\fR to communicate with another
- program, for example, a program to prompt the user and receive a
- password typed in.
- .LP
- .SH ABORT STRINGS
- Many modems will report the status of the call as a string. These
- strings may be \fBCONNECTED\fR or \fBNO CARRIER\fR or \fBBUSY\fR. It
- is often desirable to terminate the script should the modem fail to
- connect to the remote. The difficulty is that a script would not know
- exactly which modem string it may receive. On one attempt, it may
- receive \fBBUSY\fR while the next time it may receive \fBNO CARRIER\fR.
- .LP
- These "abort" strings may be specified in the script using the \fIABORT\fR
- sequence. It is written in the script as in the following example:
- .IP
- ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT5551212 CONNECT
- .LP
- This sequence will expect nothing; and then send the string ATZ. The
- expected response to this is the string \fIOK\fR. When it receives \fIOK\fR,
- the string ATDT5551212 to dial the telephone. The expected string is
- \fICONNECT\fR. If the string \fICONNECT\fR is received the remainder of the
- script is executed. However, should the modem find a busy telephone, it will
- send the string \fIBUSY\fR. This will cause the string to match the abort
- character sequence. The script will then fail because it found a match to
- the abort string. If it received the string \fINO CARRIER\fR, it will abort
- for the same reason. Either string may be received. Either string will
- terminate the \fIchat\fR script.
- .SH CLR_ABORT STRINGS
- This sequence allows for clearing previously set \fBABORT\fR strings.
- \fBABORT\fR strings are kept in an array of a pre-determined size (at
- compilation time); \fBCLR_ABORT\fR will reclaim the space for cleared
- entries so that new strings can use that space.
- .SH SAY STRINGS
- The \fBSAY\fR directive allows the script to send strings to the user
- at the terminal via standard error. If \fBchat\fR is being run by
- pppd, and pppd is running as a daemon (detached from its controlling
- terminal), standard error will normally be redirected to the file
- /etc/ppp/connect\-errors.
- .LP
- \fBSAY\fR strings must be enclosed in single or double quotes. If
- carriage return and line feed are needed in the string to be output,
- you must explicitly add them to your string.
- .LP
- The SAY strings could be used to give progress messages in sections of
- the script where you want to have 'ECHO OFF' but still let the user
- know what is happening. An example is:
- .IP
- ABORT BUSY
- .br
- ECHO OFF
- .br
- SAY "Dialling your ISP...\en"
- .br
- \&'' ATDT5551212
- .br
- TIMEOUT 120
- .br
- SAY "Waiting up to 2 minutes for connection ... "
- .br
- CONNECT ''
- .br
- SAY "Connected, now logging in ...\en"
- .br
- ogin: account
- .br
- ssword: pass
- .br
- $ \ec
- .br
- SAY "Logged in OK ...\en"
- \fIetc ...\fR
- .LP
- This sequence will only present the SAY strings to the user and all
- the details of the script will remain hidden. For example, if the
- above script works, the user will see:
- .IP
- Dialling your ISP...
- .br
- Waiting up to 2 minutes for connection ... Connected, now logging in ...
- .br
- Logged in OK ...
- .LP
- .SH REPORT STRINGS
- A \fBreport\fR string is similar to the ABORT string. The difference
- is that the strings, and all characters to the next control character
- such as a carriage return, are written to the report file.
- .LP
- The report strings may be used to isolate the transmission rate of the
- modem's connect string and return the value to the chat user. The
- analysis of the report string logic occurs in conjunction with the
- other string processing such as looking for the expect string. The use
- of the same string for a report and abort sequence is probably not
- very useful, however, it is possible.
- .LP
- The report strings to no change the completion code of the program.
- .LP
- These "report" strings may be specified in the script using the \fIREPORT\fR
- sequence. It is written in the script as in the following example:
- .IP
- REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT '' ogin: account
- .LP
- This sequence will expect nothing; and then send the string
- ATDT5551212 to dial the telephone. The expected string is
- \fICONNECT\fR. If the string \fICONNECT\fR is received the remainder
- of the script is executed. In addition the program will write to the
- expect\-file the string "CONNECT" plus any characters which follow it
- such as the connection rate.
- .SH CLR_REPORT STRINGS
- This sequence allows for clearing previously set \fBREPORT\fR strings.
- \fBREPORT\fR strings are kept in an array of a pre-determined size (at
- compilation time); \fBCLR_REPORT\fR will reclaim the space for cleared
- entries so that new strings can use that space.
- .SH ECHO
- The echo options controls whether the output from the modem is echoed
- to \fIstderr\fR. This option may be set with the \fI\-e\fR option, but
- it can also be controlled by the \fIECHO\fR keyword. The "expect\-send"
- pair \fIECHO\fR \fION\fR enables echoing, and \fIECHO\fR \fIOFF\fR
- disables it. With this keyword you can select which parts of the
- conversation should be visible. For instance, with the following
- script:
- .IP
- ABORT 'BUSY'
- .br
- ABORT 'NO CARRIER'
- .br
- \&'' ATZ
- .br
- OK\er\en ATD1234567
- .br
- \er\en \ec
- .br
- ECHO ON
- .br
- CONNECT \ec
- .br
- ogin: account
- .LP
- all output resulting from modem configuration and dialing is not visible,
- but starting with the \fICONNECT\fR (or \fIBUSY\fR) message, everything
- will be echoed.
- .SH HANGUP
- The HANGUP options control whether a modem hangup should be considered
- as an error or not. This option is useful in scripts for dialling
- systems which will hang up and call your system back. The HANGUP
- options can be \fBON\fR or \fBOFF\fR.
- .br
- When HANGUP is set OFF and the modem hangs up (e.g., after the first
- stage of logging in to a callback system), \fBchat\fR will continue
- running the script (e.g., waiting for the incoming call and second
- stage login prompt). As soon as the incoming call is connected, you
- should use the \fBHANGUP ON\fR directive to reinstall normal hang up
- signal behavior. Here is an (simple) example script:
- .IP
- ABORT 'BUSY'
- .br
- \&'' ATZ
- .br
- OK\er\en ATD1234567
- .br
- \er\en \ec
- .br
- CONNECT \ec
- .br
- \&'Callback login:' call_back_ID
- .br
- HANGUP OFF
- .br
- ABORT "Bad Login"
- .br
- \&'Callback Password:' Call_back_password
- .br
- TIMEOUT 120
- .br
- CONNECT \ec
- .br
- HANGUP ON
- .br
- ABORT "NO CARRIER"
- .br
- ogin:\-\-BREAK\-\-ogin: real_account
- .br
- \fIetc ...\fR
- .LP
- .SH TIMEOUT
- The initial timeout value is 45 seconds. This may be changed using the \fB\-t\fR
- parameter.
- .LP
- To change the timeout value for the next expect string, the following
- example may be used:
- .IP
- ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:\-\-ogin: TIMEOUT 5 assword: hello2u2
- .LP
- This will change the timeout to 10 seconds when it expects the login:
- prompt. The timeout is then changed to 5 seconds when it looks for the
- password prompt.
- .LP
- The timeout, once changed, remains in effect until it is changed again.
- .SH SENDING EOT
- The special reply string of \fIEOT\fR indicates that the chat program
- should send an EOT character to the remote. This is normally the
- End-of-file character sequence. A return character is not sent
- following the EOT.
- The EOT sequence may be embedded into the send string using the
- sequence \fI^D\fR.
- .SH GENERATING BREAK
- The special reply string of \fIBREAK\fR will cause a break condition
- to be sent. The break is a special signal on the transmitter. The
- normal processing on the receiver is to change the transmission rate.
- It may be used to cycle through the available transmission rates on
- the remote until you are able to receive a valid login prompt.
- The break sequence may be embedded into the send string using the
- \fI\eK\fR sequence.
- .SH ESCAPE SEQUENCES
- The expect and reply strings may contain escape sequences. All of the
- sequences are legal in the reply string. Many are legal in the expect.
- Those which are not valid in the expect sequence are so indicated.
- .TP
- .B ''
- Expects or sends a null string. If you send a null string then it will still
- send the return character. This sequence may either be a pair of apostrophe
- or quote characters.
- .TP
- .B \eb
- represents a backspace character.
- .TP
- .B \ec
- Suppresses the newline at the end of the reply string. This is the only
- method to send a string without a trailing return character. It must
- be at the end of the send string. For example,
- the sequence hello\ec will simply send the characters h, e, l, l, o.
- .I (not valid in expect.)
- .TP
- .B \ed
- Delay for one second. The program uses sleep(1) which will delay to a
- maximum of one second.
- .I (not valid in expect.)
- .TP
- .B \eK
- Insert a BREAK
- .I (not valid in expect.)
- .TP
- .B \en
- Send a newline or linefeed character.
- .TP
- .B \eN
- Send a null character. The same sequence may be represented by \e0.
- .I (not valid in expect.)
- .TP
- .B \ep
- Pause for a fraction of a second. The delay is 1/10th of a second.
- .I (not valid in expect.)
- .TP
- .B \eq
- Suppress writing the string to the SYSLOG file. The string ?????? is
- written to the log in its place.
- .I (not valid in expect.)
- .TP
- .B \er
- Send or expect a carriage return.
- .TP
- .B \es
- Represents a space character in the string. This may be used when it
- is not desirable to quote the strings which contains spaces. The
- sequence 'HI TIM' and HI\esTIM are the same.
- .TP
- .B \et
- Send or expect a tab character.
- .TP
- .B \eT
- Send the phone number string as specified with the \fI\-T\fR option
- .I (not valid in expect.)
- .TP
- .B \eU
- Send the phone number 2 string as specified with the \fI\-U\fR option
- .I (not valid in expect.)
- .TP
- .B \e\e
- Send or expect a backslash character.
- .TP
- .B \eddd
- Collapse the octal digits (ddd) into a single ASCII character and send that
- character.
- .I (some characters are not valid in expect.)
- .TP
- .B \^^C
- Substitute the sequence with the control character represented by C.
- For example, the character DC1 (17) is shown as \^^Q.
- .I (some characters are not valid in expect.)
- .SH ENVIRONMENT VARIABLES
- Environment variables are available within chat scripts, if the \fI\-E\fR
- option was specified in the command line. The metacharacter \fI$\fR is used
- to introduce the name of the environment variable to substitute. If the
- substitution fails, because the requested environment variable is not set,
- \fInothing\fR is replaced for the variable.
- .SH TERMINATION CODES
- The \fIchat\fR program will terminate with the following completion
- codes.
- .TP
- .B 0
- The normal termination of the program. This indicates that the script
- was executed without error to the normal conclusion.
- .TP
- .B 1
- One or more of the parameters are invalid or an expect string was too
- large for the internal buffers. This indicates that the program as not
- properly executed.
- .TP
- .B 2
- An error occurred during the execution of the program. This may be due
- to a read or write operation failing for some reason or chat receiving
- a signal such as SIGINT.
- .TP
- .B 3
- A timeout event occurred when there was an \fIexpect\fR string without
- having a "\-subsend" string. This may mean that you did not program the
- script correctly for the condition or that some unexpected event has
- occurred and the expected string could not be found.
- .TP
- .B 4
- The first string marked as an \fIABORT\fR condition occurred.
- .TP
- .B 5
- The second string marked as an \fIABORT\fR condition occurred.
- .TP
- .B 6
- The third string marked as an \fIABORT\fR condition occurred.
- .TP
- .B 7
- The fourth string marked as an \fIABORT\fR condition occurred.
- .TP
- .B ...
- The other termination codes are also strings marked as an \fIABORT\fR
- condition.
- .LP
- Using the termination code, it is possible to determine which event
- terminated the script. It is possible to decide if the string "BUSY"
- was received from the modem as opposed to "NO DIAL TONE". While the
- first event may be retried, the second will probably have little
- chance of succeeding during a retry.
- .SH SEE ALSO
- Additional information about \fIchat\fR scripts may be found with UUCP
- documentation. The \fIchat\fR script was taken from the ideas proposed
- by the scripts used by the \fIuucico\fR program.
- .LP
- uucico(1), uucp(1)
- .SH COPYRIGHT
- The \fIchat\fR program is in public domain. This is not the GNU public
- license. If it breaks then you get to keep both pieces.
|