*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Tru64 Unix man pages -> chat (8)              
Title
Content
Arch
Section
 

chat(8)

Contents


NAME    [Toc]    [Back]

       chat - Automated conversational script with a modem

SYNOPSIS    [Toc]    [Back]

       /usr/sbin/chat [options] script

OPTIONS    [Toc]    [Back]

       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 ECHO keyword. When echoing is enabled, all output
 from the modem is echoed to standard error.  Reads the
       chat  script from the chatfile.  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.  Set the
       file for output of the report strings. If you use the keyword
  REPORT,  the  resulting  strings are written to this
       file. If this option is not used and you still use  REPORT
       keywords,  the  standard error file is used for the report
       strings.  Sets the timeout for the expected string  to  be
       received.   If  the string is not received within the time
       limit, 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 causes the  chat  program
  to  terminate  with  a nonzero error code.  Requests
       that the chat script be executed in a verbose  mode.   The
       chat program logs all text received from the modem and the
       output strings  that  it  sends  to  the  syslog  command.
       Requests  that  the  chat script be executed in a standard
       error verbose mode. The chat program then  logs  all  text
       received  from  the  modem and the output strings which it
       sends to the standard error device. This device is usually
       the  local console at the station running the chat or pppd
       program. This option does not work properly if  the  standard
  error  is redirected to the /dev/null location as is
       the case when pppd runs in  the  detached  mode.  In  that
       case,  use the -v option to record the session on the SYSLOG
 device.  If the script is not specified in a file with
       the -f option then the script is included as parameters to
       the chat program.

DESCRIPTION    [Toc]    [Back]

       The chat 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 (pppd) and the pppd process of the remote system.


   CHAT SCRIPT    [Toc]    [Back]
       The chat script defines  the  communications  between  the
       local system and a remote system. 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:

       ogin:-BREAK-ogin: ppp ssword: hello2u2

       In the previous example,  the  chat  program  expects  the
       string  "ogin:".   If  it  fails to receive a login prompt
       within the time interval allotted, the chat program  sends
       a break sequence to the remote system, and then expects to
       receive the string  "ogin:".   If  the  first  "ogin:"  is
       received, the break sequence is not generated.

       Once  it receives the login prompt, the chat program sends
       the string ppp,  and  expects  to  receive  the  "ssword:"
       prompt.   When  prompted  for  the  password, it sends the
       password hello2u2.

       A carriage return is normally  sent  following  the  reply
       string.   It is not expected in the "expect" string unless
       it is requested by specifying the \r escape sequence.

       The expect sequence should contain  only  the  information
       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.

       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:".

       A very simple script is as follows:

       ogin: ppp ssword: hello2u2

       In other words, expect ogin:, send  ppp,  expect  ssword:,
       send hello2u2.

       In  practice, simple scripts are rare.  At the very least,
       you should include subexpect sequences in case the  original
 string is not received, as in the following script:

       ogin:--ogin: ppp ssword: hello2u2

       The  preceding  script  is better than the simple one used
       earlier.  This looks for the same login:  prompt,  but  if
       one is not received, it sends a single return sequence and
       looks for login: again.  If line noise obscures the  first
       login  prompt,  sending  an empty line usually generates a
       login prompt again.

   COMMENTS    [Toc]    [Back]
       Comments can be embedded in the chat script by beginning a
       line  with the number (#) character in column 1. Such comment
 lines are ignored by the chat program.  If  a  number
       (#)  character  is  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 number
       (#) character, enter a text string similar to the  following:


       #  Now  wait  for  the  prompt and send logout string '# '
       logout










   ABORT STRINGS    [Toc]    [Back]
       Many modems report the status of the call as  one  of  the
       following  strings: CONNECTED, NO CARRIER, or BUSY.  It is
       often desirable to terminate the script if the modem fails
       to connect to the remote system.  The difficulty is that a
       script does not know which modem string it might  receive.
       On  one attempt, it might receive BUSY while the next time
       it might receive NO CARRIER.

       These abort strings may be specified in the  script  using
       the ABORT sequence as shown in the following example:

       ABORT  BUSY  ABORT 'NO CARRIER' '' ATZ OK ATDT5551212 CONNECT


       Using this sequence, the  chat  program  expects  nothing,
       sends  the  string  ATZ,  and  then expects the string OK.
       When  it  receives  OK,  the  program  sends  the   string
       ATDT5551212  to dial the telephone, and expects the string
       CONNECT.  If the string CONNECT is received, the remainder
       of the script is executed.

       If the telephone is busy, the modem sends the string BUSY.
       This causes  the  string  to  match  the  abort  character
       sequence, and the script fails because it found a match to
       the abort string.  If it receives the NO  CARRIER  string,
       it  aborts  for the same reason.  Either string terminates
       the chat script.

   CLR_ABORT STRINGS    [Toc]    [Back]
       This sequence allows for  clearing  previously  set  ABORT
       strings.  The ABORT strings are kept in an array of a predetermined
 size (at compilation time); CLR_ABORT  reclaims
       the  space for cleared entries so that new strings can use
       that space.

   SAY STRINGS    [Toc]    [Back]
       The SAY directive allows the script to send strings to the
       user at the terminal via standard error.  If the chat program
 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 /etc/ppp/connect-errors
       file.

       The  SAY  strings  must  be  enclosed  in single or double
       quotes. If carriage return and line  feed  characters  are
       needed in the string to be output, you must explicitly add
       them to your string.

       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,  for  example:


       ABORT BUSY

       ECHO OFF

       SAY "Dialing your ISP...\n"

       '' ATDT5551212

       TIMEOUT 120

       SAY "Waiting up to 2 minutes for connection ... "

       CONNECT ''

       SAY "Connected, now logging in ...0"

       ogin: account

       ssword: pass

       $ SAY "Logged in OK ...0" etc ...

       This  sequence  presents  the  SAY  strings  to  the user;
       details of the script remain hidden. For example,  if  the
       above  script  works,  the  following  information is displayed.
  Dialing your ISP...

       Waiting up to 2 minutes for connection ... Connected,  now
       logging in ...

       Logged in OK ...


   REPORT STRINGS    [Toc]    [Back]
       A REPORT string is different from the ABORT string in that
       the strings, and all characters to the next control  character
 such as a carriage return, are written to the report
       file.

       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 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
       useful, but it is possible.

       The REPORT strings do not change the  completion  code  of
       the program.

       You  can  specify these report strings in the script using
       the REPORT sequence, as shown in the following example:

       REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT ''  ogin:
       account

       Using  this  sequence  the  chat  program expects nothing,
       sends the string ATDT5551212 to dial  the  telephone,  and
       expects  the  string  CONNECT.  If  the  CONNECT string is
       received, the remainder of the script executes.  In  addition,
  the  program  writes to the expect-file the CONNECT
       string plus any characters, such as  the  connection  rate
       which follow it.

   CLR_REPORT STRINGS    [Toc]    [Back]
       This  sequence  allows  for clearing previously set REPORT
       strings.  The REPORT strings are kept in  an  array  of  a
       predetermined   size  (at  compilation  time);  CLR_REPORT
       reclaims the space for cleared entries so that new strings
       can use that space.








   ECHO    [Toc]    [Back]
       The echo option controls whether the output from the modem
       is echoed to standard error. This option may be  set  with
       the  -e  option, but it can also be controlled by the ECHO
       keyword. The expect-send pair ECHO ON enables echoing, and
       ECHO  OFF  disables  it.  With this keyword you can select
       which parts of the conversation should  be  visible.   For
       instance,  with the following script, all output resulting
       from modem configuration and dialing is not  visible,  but
       starting with the CONNECT (or BUSY) message, everything is
       echoed.

       ABORT    'BUSY'  .br  ABORT    'NO  CARRIER'  .br  .br  ''
       ATZ  .br  OK\r\n  ATD1234567 .br \r\n    \c .br ECHO    ON
       .br CONNECT \c .br ogin:   account


   HANGUP    [Toc]    [Back]
       The HANGUP option controls whether a modem hangup is  considered
  as  an  error  or  not.  This option is useful in
       scripts to dial systems that hang up and call your  system
       back.  The HANGUP options can be ON or OFF. When HANGUP is
       set OFF and the modem hangs up  (for  example,  after  the
       first stage of logging in to a callback system), chat continues
 running the script (for example,  waiting  for  the
       incoming  call  and  second  stage login prompt). When the
       incoming call connects,  you  should  use  the  HANGUP  ON
       directive  to reinstall normal hang up signal behavior, as
       shown in the following example:

       ABORT   'BUSY'

       ''      ATZ

       OK\r\n  ATD1234567

       \r\n    \c

       CONNECT \c

       'Callback login:' call_back_ID

       HANGUP OFF

       ABORT "Bad Login"

       'Callback Password:' Call_back_password

       TIMEOUT 120

       CONNECT \c

       HANGUP ON

       ABORT "NO CARRIER"

       ogin:--BREAK--ogin: real_account

       etc ...







   TIMEOUT    [Toc]    [Back]
       The initial timeout value of 45 seconds can be changed  by
       using   the   -t  timeout  option,  for  example:  ATZ  OK
       ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5 assword:
 \ hello2u2

       This  sequence  changes  the timeout to 10 seconds when it
       expects the login: prompt, then changes the timeout  to  5
       seconds when it looks for the password prompt.

       The  timeout,  once changed, remains in effect until it is
       changed again.

   SENDING EOT    [Toc]    [Back]
       The special reply string of EOT indicates  that  the  chat
       program should send an EOT character to the remote system.
       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 ^D.

   GENERATING BREAK    [Toc]    [Back]
       The BREAK reply string causes  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  system  until
       you are able to receive a valid login prompt.

       You  can  embed the break sequence into the send string by
       using the \K escape sequence.

   ESCAPE SEQUENCES    [Toc]    [Back]
       The expect and reply strings may contain escape sequences.
       All  of  the sequences are valid in the reply string; many
       are legal in the expect string.  Those sequences which are
       not  valid in the expect string are so indicated.  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.   Represents
  a backspace character.  Suppresses the newline at
       the end of the reply string.  This is the  only  means  of
       sending  a string without a trailing return character.  It
       must be at the end of the send string.  For  example,  the
       sequence  hello\c  will send the characters h, e, l, l, o.
       (Not valid in expect.)  Delays for one second.   The  program
 uses the sleep command, which will delay to a maximum
       of one second.  (Not valid in expect.)  Inserts  a  BREAK.
       (Not  valid in expect.)  Sends a newline or linefeed character.
  Sends a null character.  The same sequence may  be
       represented  by  \0.  (Not valid in expect.)  Pauses for a
       fraction of a second.  The delay is 1/10th  of  a  second.
       (Not  valid  in expect.)  Suppresses writing the string to
       the syslog file. The string ?????? is written to  the  log
       in  its  place. (Not valid in expect.)  Sends or expects a
       carriage return.  Represents  a  space  character  in  the
       string.   Use  this  when it is not desirable to quote the
       strings that contain spaces. The  sequence  `HI  TIM'  and
       HI\sTIM  are  the same.  Sends or expects a tab character.
       Sends or expects a  backslash  character.   Collapses  the
       octal digits (ddd) into a single ASCII character and sends
       that character. (Some characters are not valid in expect.)
       Substitutes the sequence with the control character represented
 by C. For example, the character DC1 (17) is  shown
       as ^Q. (Some characters are not valid in expect.)

EXIT STATUS    [Toc]    [Back]

       The  chat program terminates with the following completion
       codes.  The normal termination of the program. This  indicates
  that  the  script was executed without error to the
       normal conclusion.  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.   An  error occurred during the execution of the
       program. This may be due to failure of  a  read  or  write
       operation  or  chat  receiving a signal such as SIGINT.  A
       timeout event occurred due to an expect string  without  a
       -subsend  string.  This  may mean that you did not program
       the script correctly for the condition or that some  unexpected
  event  occurred  and  the  expected string was not
       found.  The first string  marked  as  an  ABORT  condition
       occurred.   The second string marked as an ABORT condition
       occurred.  The third string marked as an  ABORT  condition
       occurred.   The fourth string marked as an ABORT condition
       occurred.  The other termination codes  are  also  strings
       marked as an ABORT condition.

       You  can use the termination code 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.

SEE ALSO    [Toc]    [Back]

      
      
       Commands: uucp(1), pppd(8), uucico(8)



                                                          chat(8)
[ Back ]
 Similar pages
Name OS Title
dxshutdown Tru64 Performs various types of automated system shutdown.
maze Tru64 an automated X11 demo repeatedly creating and solving a random maze
umodem OpenBSD USB modem support
addModem IRIX add a modem to the system
umodem FreeBSD USB modem support
getallpppinmodem IRIX get all PPP incoming modem entries
deleteModem IRIX delete a modem from the system
getallpppoutmodem IRIX get all PPP outgoing modem entries
modem HP-UX asynchronous serial modem line control
terminfo HP-UX printer, terminal, and modem capability database
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service