18.4. Il significato di uno script di Conversazione (chat)...

Un script di conversazione è una sequenza di coppie "stringa attesa" "stringa inviata". In particolare, si noti che ci si aspetta SEMPRE QUALCOSA prima di inviare qualcos'altro.

Se si invia qualcosa SENZA prima ricevere niente, si deve usare una stringa attesa vuota (indicata da " ") e similmente per aspettare qualcosa senza inviare niente! Inoltre, se una stringa consiste di diverse parole (p.e. NO CARRIER), bisogna racchiuderla tra apici in modo che chat la veda come una singola entità.

La riga di conversazione nel nostro esempio è:-

exec /usr/sbin/chat -v

Invocando chat, il -v dice di copiare TUTTO il suo I/O nel log di sistema (solitamente /var/log/messages). Una volta che si è contenti di come funziona lo script, si modifichi questa riga per rimuovere il -v per preservare i log di sistema da confusione non necessaria.

TIMEOUT         3
Questo imposta il timeout per la ricezione di un input atteso a tre secondi. Può essere necessario incrementarlo a 5 o 10 secondi se si sta usando un modem veramente lento!

ABORT           '\nBUSY\r'

Se si riceve la stringa BUSY, termina l'operazione.

ABORT           '\nNO ANSWER\r'

Se si riceve la stringa NO ANSWER, termina l'operazione.

ABORT           '\nRINGING\r\n\r\nRINGING\r'

Se si riceve (ripetutamente) la stringa RINGING, termina l'operazione. Significa che qualcuno vi sta chiamando al telefono!

\rAT

Attende che il modem non ritorni niente e invia la stringa AT.

OK-+++\c-OK   ATH0

Questa è un po' più complicata in quanto sfrutta qualcuna delle capacità di recupero dagli errori di chat.

Quello che dice è... Attendi OK, se NON è ricevuto (perché il modem non è in modo comandi) allora invia +++ (la stringa predefinita Hayes-compatibile che riporta il modem in modo comandi) e attendi OK. Poi invia ATH0 (la stringa di "riattacco" del modem). Questo permette allo script di far fronte alle situazioni nelle quali il modem è "bloccato in linea"!

TIMEOUT         30

Imposta il timeout a 30 secondi per il resto dello script. Se si ha esperienza di problemi con lo script di chat che termina a causa di timeout, lo si incrementi a 45 secondi o più.

OK              ATDT$TELEPHONE

Attende OK (la risposta del modem al comando ATH0) e compone il numero che si vuole chiamare.

CONNECT         ''

Attende CONNECT (che il modem invia quando il modem remoto risponde) e non invia niente in risposta.

ogin:--ogin:    $ACCOUNT

Ancora, abbiamo anche qui un po' di recupero dagli errori. Aspetta il prompt del login (...ogin:) ma se non lo riceve entro il timeout, invia un return e poi attende ancora il prompt del login. Quando ha ricevuto il prompt, invia il nome utente (salvato nella variabile $ACCOUNT).

assword:        $PASSWORD

Attende il prompt della password e invia la password (ancora, salvata in una variabile shell).

Questo script ha delle ragionevoli capacità di recupero dagli errori. Chat ha considerevolmente molte più possibilità di quelle dimostrate qui. Per maggiori informazioni si consulti la pagina di manuale di chat (man 8 chat).

18.4.1. Avviare PPP dal lato server

Sebbene lo script ppp-on-dialer vada bene per server che avviano automaticamente il pppd dal loro lato della connessione una volta effettuato il login, alcuni server richiedono che si avvii esplicitamente il PPP nel server.

Se si deve dare un comando per avviare il PPP sul server, allora si DEVE modificare lo script ppp-on-dialer.

Alla FINE dello script (dopo la riga della password) si aggiunga un'altra coppia attesa inviata - questa cercherà il proprio prompt della shell (si faccia attenzione ai caratteri che hanno un significato particolare nella Bourne shell - come $ e [ o ] - parentesi quadre aperte e chiuse).

Una volta che chat ha trovato il prompt della shell, deve dare il comando di avvio del PPP richiesto dal proprio ISP.

Nel mio caso, il mio server PPP usa il prompt della Linux Bash predefinito
[hartr@kepler hartr]$

e richiede che io digiti

ppp

per avviare il PPP sul server.

È una buona idea permettere un po' di recupero dagli errori anche qui, quindi nel mio caso uso
	hartr--hartr	ppp

Questo dice che se non si riceve il prompt entro il timeout si invia un ritorno carrello (carriage return) e si cerca un'altra volta il prompt.

Una volta ricevuto il prompt, allora invia la stringa ppp.

Nota: non si dimentichi di aggiungere un \ alla fine della riga precedente cosicché chat pensi ancora che l'intero script di conversazione sia su una riga!

Sfortunatamente, alcuni server producono un insieme di prompt molto variabili! Può essere necessario effettuare più volte il login usando minicom per capire l'andamento e scegliere una stringa "attesa" stabile.