# demon_slip.dip: connection script for (C)SLIP.
# Copyright 1994-6 John A. Phillips - john@linux.demon.co.uk

# **********************************************************************
# * Configuration and modem set-up section *****************************
# **********************************************************************
# Set up the counters for permitted log-in attempts.
  get $free_times 10
  get $paid_times 3

# Set the desired serial port name (in /dev) and port speed.
  port modem
  speed 115200

# Define the modem initialisation string.  This is the string sent to
# the modem by the dial command each time just prior to (re-)dialling.
#
# For the USR Courier V.Everything (see Demon's Modem.txt)
# ========================================================
# Mode    Set by   Comment
# B0      &F1      ITU-T answer mode (not US Bell answer mode)
# C1      Default  Transmitter enabled
# E1   *  D/SW 4   Command mode echo on
# F1      Default  Full duplex (online local echo off)
# Q0   *  D/SW 3   Display result codes
# V1   *  D/SW 2   Verbal (not numeric) result codes
# &A3     &F1      Display the most detailed connect result codes
# &B1     Default  Serial port data rate stays fixed
# &C1  *  D/SW 6   Modem sends Carrier Detect (CD) on connection
# &D2  *  D/SW 1   DTR enables the modem (when set) or drops the line
# &G2  *  -        UK guard tone (1800 Hz)
# &H1     &F1      Enable hardware (CTS) transmit flow control
# &I0     &F1      Disable software (XON/XOFF) receive flow control
# &K3  *  -        Use V.42bis compression only (no MNP5)
# &N0     Default  Modem negotiates variable link rate
# &R2     &F1      Enable hardware (RTS) receive flow control
# &S1  *  -        Modem sends DSR to CPU on answer
#
# Other additions
# ===============
# X6      -        Report VOICE on the line
# &M5     -        Drop non-ARQ connections
# S39=15  -        Reduce the transmit level from -10 dBm to -15 dBm
# S54.5=1 -        Disable the top V.34 baud rate (Ascend problem?)
  init ATE1Q0V1&C1&D2&G2&K3&S1X6&M5S39=15S54.5=1

# Set up the non-default chat keys for the dial command (see "man dip"
# for the defaults, and note that dial returns errlvl 3 on timeout).
  chatkey NO\sDIAL\sTONE 5
  chatkey BUSY 6
  chatkey RINGING\r\n\r\nRINGING\r\n\r\nRINGING 7
  chatkey VOICE 8

# Turn on echoing of the control commands, responses etc.
  echo on

# Reset the terminal line and modem.  This may be necessary for some
# people but unnecessary for others.  Uncomment the next line only if
# you need to reset the modem here.
# reset

# Send a set-up string to the modem.  This string is sent once only.  
# The init string (above) is sent to the modem before each (re-)dial.
  send AT&F1\r
  wait OK 3
  print
  if $errlvl == 0 goto dial
  print Timeout or other error setting up the modem - OK not received
  exit 1

# **********************************************************************
# * Dialling section ***************************************************
# **********************************************************************
dial:
  print

# Dial Chelmsford National Mercury ROMP with timeout.
  print Dialling the Chelmsford NMR ...
  dial T01245-708666 45

# Deal with a specified result from the dial command.
  if $errlvl == 0 goto othererr
  if $errlvl == 1 goto connect
  if $errlvl == 2 goto othererr
  if $errlvl == 3 goto timeout
  if $errlvl == 4 goto nocarrier
  if $errlvl == 5 goto nodialtone
  if $errlvl == 6 goto busy
  if $errlvl == 7 goto ringing
  if $errlvl == 8 goto voice

# Deal with an unspecified result from the dial command.
  print
  print Unknown error from the dial command
  exit 1

# **********************************************************************
# * Dial error handling section ****************************************
# **********************************************************************
# Use reset only if the response from the dial command fails to properly
# take the modem off-line and into command mode.  The VOICE, RINGING and
# TIMEOUT responses need it (USR Courier).
voice:
  print VOICE
  reset
  goto paid_redial
ringing:
  print RINGING OUT
  reset
  goto free_redial
busy:
  print BUSY
  goto free_redial
nodialtone:
  print NO DIAL TONE
  goto free_redial
nocarrier:
  print NO CARRIER waiting for CONNECT
  goto paid_redial
timeout:
  print TIMEOUT waiting for CONNECT
  reset
  goto paid_redial
othererr:
  print
  print Unexpected OK or ERROR received from the modem
  exit 1

# **********************************************************************
# * Re-dialling section ************************************************
# **********************************************************************
free_redial:
  dec $free_times
  if $free_times > 0 goto dial
  print
  print Exceeded the free tries limit
  exit 1
paid_redial:
  dec $paid_times
  if $paid_times > 0 goto dial
  print
  print Exceeded the paid tries limit
  exit 1

# **********************************************************************
# * Login section ******************************************************
# **********************************************************************
connect:
  wait ogin: 20
  if $errlvl != 0 goto login_error
  sleep 1
  send <YOUR_HOST_NAME>\r
  wait word: 60
  if $errlvl != 0 goto password_error
  send <YOUR_PASSWORD>\r
  wait ocol: 60
  if $errlvl != 0 goto protocol_error
  send slip,idle=240,mru=576\r
  wait HELLO 60
  if $errlvl != 0 goto hello_error

# Set the local and remote ends of the link.
  get $local <YOUR_HOST_NAME>.demon.co.uk
  get $rmtip 158.152.1.222

# This is the default route.  The mtu must match the mru above.
  get $mtu 576
  default

# Announce the connection.
  print
  print Dial-up and log-on completed
  print Waiting for (C)SLIP to come up ...

# Recommended for the Ascend servers.
# sleep 1
# send \r

# Initiate (C)SLIP and exit.
  mode SLIP
  exit 0

# **********************************************************************
# * Login error handling section ***************************************
# **********************************************************************
login_error:
  print Timeout or other error waiting for the login prompt
  goto login_redial
password_error:
  print Timeout or other error waiting for the password prompt
  goto login_redial
protocol_error:
  print Timeout or other error waiting for the protocol prompt
  goto login_redial
hello_error:
  print Timeout or other error waiting for the HELLO prompt
login_redial:
  reset
  goto paid_redial