CHAT(8) System Manager's Manual CHAT(8) NUME chat - script conversaional automatizat cu un modem SINOPSIS chat [ opiuni ] script DESCRIERE Programul chat definete un schimb conversaional intre calculator i modem. Scopul sau principal este de a stabili conexiunea intre demonul protocolului punct-la-punct (,,Point-to-Point Protocol Daemon": pppd) i procesul pppd de la distana. OPIUNI -f ier-chat> Citete scriptul de chat din fiierul fiier-chat. Utilizarea acestei opiuni se exclude reciproc cu parametrii scriptului de chat. Utilizatorul trebuie sa aiba acces de citire la fiier. Sunt permise mai multe linii in fiier. Pentru a separa irurile de caractere trebuie sa se utilizeze spaii sau caractere de tabulare orizontala. -t teptare> Stabilete timpul de ateptare pentru primirea irului ateptat. Daca irul nu este primit in termenul limita, atunci irul de raspuns nu este trimis. Se poate trimite un raspuns alternativ sau scriptul va eua daca nu exista un ir de raspuns alternativ. Un script euat va face ca programul chat sa se incheie cu un cod de eroare diferit de zero. -r ier-raport> Stabilete fiierul de ieire a irurilor de raport. Daca se utilizeaza cuvantul cheie REPORT, irurile rezultate sunt scrise in acest fiier. Daca nu se utilizeaza aceasta opiune i se utilizeaza in continuare cuvintele cheie REPORT, fiierul stderr (ieirea de eroare standard) este utilizat pentru irurile de raport. -e Incepe cu opiunea de ecou activata. Ecoul poate fi, de asemenea, activat sau dezactivat in anumite puncte ale scriptului de chat prin utilizarea cuvantului cheie ECHO. Atunci cand funcia de ecou este activata, toate ieirile de la modem sunt transmise la stderr. -E Permite inlocuirea variabilelor de mediu in scripturile de chat folosind sintaxa standard $xxx. -v Solicita ca scriptul chat sa fie executat in modul descriptiv. Programul chat va consemna apoi starea de execuie a scriptului de chat, precum i toate textele primite de la modem i irurile de ieire trimise la modem. In mod implicit, se inregistreaza prin intermediul SYSLOG; metoda de inregistrare poate fi modificata cu ajutorul opiunilor ,,-S" i ,,-s". -V Solicita ca scriptul chat sa fie executat in modul descriptiv la ieirea de eroare standard (stderr). Astfel, programul chat va inregistra pe dispozitivul ,,stderr" toate textele primite de la modem i irurile de ieire trimise la modem. Acest dispozitiv este de obicei consola locala de la staia care executa programul chat sau pppd. -s Utilizeaza ieirea de eroare standard (stderr). Toate mesajele de jurnal de la opiunea ,,-v" i toate mesajele de eroare vor fi trimise la stderr. -S Nu utilizeaza SYSLOG. In mod implicit, mesajele de eroare sunt trimise la SYSLOG. Utilizarea opiunii ,,-S" va impiedica atat mesajele de jurnal de la opiunea ,,-v", cat i mesajele de eroare sa fie trimise la SYSLOG. -T Introduce un ir arbitrar, de obicei un numar de telefon, care va fi inlocuit cu metacaracterul de substituie \T intr-un ir de trimitere. -U Introduce un al doilea ir de caractere, de obicei un numar de telefon, care va fi inlocuit cu metacaracterul de substituie \U intr-un ir de trimitere. Acest lucru este util atunci cand se apeleaza un adaptor de terminal ISDN care necesita doua numere. script In cazul in care scriptul nu este specificat intr-un fiier cu opiunea -f, atunci scriptul este inclus ca parametri pentru programul chat. SCRIPT CHAT Scriptul chat definete comunicaiile. Un script este format din una sau mai multe perechi de iruri ,,ateapta-trimite", separate prin spaii, cu o pereche opionala de iruri subiacenta ,,ateapta-trimite", separate prin liniua, ca in exemplul urmator: ogin:-BREAK-ogin: ppp ssword: hello2u2 Aceasta linie indica faptul ca programul chat ar trebui sa atepte irul de caractere ,,ogin:". In cazul in care nu primete o solicitare de conectare in intervalul de timp alocat, acesta trebuie sa trimita o secvena de intrerupere la distana i apoi sa atepte irul ,,ogin:". Daca se primete primul ,,ogin:", atunci secvena de intrerupere nu este generata. Odata ce a primit solicitarea de conectare, programul chat va trimite irul ppp i apoi va atepta solicitarea ,,ssword:". Cand primete solicitarea de introducere a parolei, va trimite parola hello2u2. In mod normal, dupa irul de raspuns se trimite un retur de carucior. Acesta nu este ateptat in irul ,,ateapta " decat daca este solicitat in mod special prin utilizarea secvenei de caractere \r. Secvena ,,ateapta" ar trebui sa conina doar ceea ce este necesar pentru a identifica irul. Deoarece in mod normal este stocata intr-un fiier pe disc, nu trebuie sa conina informaii variabile. In general, nu este acceptabil sa se caute iruri de timp, iruri de identificare a reelei sau alte date variabile ca ir de ateptare. Pentru a ajuta la corectarea caracterelor care pot fi corupte in timpul secvenei iniiale, cauta irul ,,ogin:" in loc de ,,login:". Este posibil ca caracterul ,,l" din faa sa fie primit din greeala i este posibil sa nu gasii niciodata irul, chiar daca a fost trimis de sistem. Din acest motiv, scripturile cauta ,,ogin:" mai degraba decat ,,login:" i ,,ssword:" mai degraba decat ,,password:". Un script foarte simplu ar putea arata in felul urmator: ogin: ppp ssword: hello2u2 Cu alte cuvinte, ateapta ....ogin:, trimite ppp, ateapta ...ssword:, trimite hello2u2. In practica reala, scripturile simple sunt rare. Cel puin, ar trebui sa includei secvene de sub-ateptare in cazul in care irul original nu este primit. De exemplu, luai in considerare urmatorul script: ogin:--ogin: ppp ssword: hello2u2 Acesta ar fi un scenariu mai bun decat cel simplu folosit anterior. Acesta ar cauta aceeai solicitare login:, insa, daca nu se primete una, se trimite o singura secvena de returnare i apoi se va cauta din nou login:. In cazul in care zgomotul de linie ascunde prima solicitare de autentificare, atunci trimiterea liniei goale va genera, de obicei, o noua solicitare de autentificare. COMENTARII Comentariile pot fi incorporate in scriptul de chat. Un comentariu este o linie care incepe cu caracterul # (hash) in coloana 1. Astfel de linii de comentariu sunt pur i simplu ignorate de programul de chat. Daca trebuie ateptat un caracter ,,#" ca prim caracter al secvenei expect, trebuie sa punei intre ghilimele irul ateptat. Daca dorii sa ateptai o solicitare care incepe cu un caracter # (hash), ar trebui sa scriei ceva de genul acesta: # Acum ateapta promptul i trimite irul de ieire din sesiune '# ' logout TRIMITEREA DE DATE DINTR-UN FIIER Daca irul de trimis incepe cu un semn (@), restul irului este considerat a fi numele unui fiier care trebuie citit pentru a obine irul de trimis. In cazul in care ultimul caracter al datelor citite este o linie noua, acesta este eliminat. Fiierul poate fi o conducta cu nume (sau fifo) in loc de un fiier obinuit. Acest lucru ofera o modalitate prin care chat sa comunice cu un alt program, de exemplu, un program care sa solicite utilizatorului i sa primeasca o parola tastata de acesta. IRURI ABORT Multe modemuri vor raporta starea apelului sub forma unui ir de caractere. Aceste iruri pot fi CONNECTED (conectat) sau NO CARRIER (fara purtatoare) sau BUSY (ocupat). Adesea este de dorit sa se incheie scriptul in cazul in care modemul nu reuete sa se conecteze la distana. Dificultatea consta in faptul ca un script nu ar ti cu exactitate ce ir de caractere de modem ar putea primi. La o incercare, poate primi BUSY, in timp ce data urmatoare poate primi NO CARRIER. Aceste iruri ,,abort" pot fi specificate in script folosind secvena ABORT. Aceasta se scrie in script ca in exemplul urmator: ABORT BUSY ABORT 'NO CARRIER' " ATZ OK ATDT5551212 CONNECT Aceasta secvena nu va atepta nimic, iar apoi va trimite irul ATZ. Raspunsul ateptat la aceasta secvena este irul OK. Atunci cand primete OK, irul ATDT5551212 pentru a marca numarul de telefon. irul ateptat este CONNECT. Daca se primete irul CONNECT, se executa restul scriptului. Cu toate acestea, in cazul in care modemul gasete un telefon ocupat, acesta va trimite irul BUSY. Acest lucru va face ca irul sa se potriveasca cu secvena de caractere de anulare. In acest caz, scriptul va eua deoarece a gasit o corespondena cu irul de caractere de anulare. In cazul in care a primit irul NO CARRIER, acesta va eua din acelai motiv. Se poate primi oricare dintre aceste iruri. Oricare dintre cele doua iruri va incheia scriptul chat. IRURI CLR_ABORT Aceasta secvena permite tergerea irurilor ABORT definite anterior. irurile ABORT sunt pastrate intr-o matrice de o dimensiune predeterminata (la momentul compilarii); CLR_ABORT va recupera spaiul pentru intrarile terse, astfel incat noile iruri sa poata utiliza acel spaiu. IRURI SAY Directiva SAY permite scriptului sa trimita iruri de caractere catre utilizator la terminal prin intermediul ieirii de eroare standard. In cazul in care chat este rulat de <>, iar <> ruleaza ca un demon (detaat de terminalul care il controleaza), ieirea de eroare standard va fi redirecionata in mod normal catre fiierul ,,/etc/ppp/connect-errors". irurile SAY trebuie sa fie incluse in ghilimele simple sau duble. In cazul in care este nevoie de retur de carucior i de avans de linie in irul de ieire, trebuie sa le adaugai in mod explicit la ir. irurile SAY pot fi utilizate pentru a transmite mesaje de progres in seciuni ale scriptului in care dorii ca ,,ECHO OFF" sa fie dezactivat, dar utilizatorul sa tie totui ce se intampla. Un exemplu este: ABORT BUSY ECHO OFF SAY "Se apeleaza furnizorul dvs. de servicii de internet (ISP)...\n" " ATDT5551212 TIMEOUT 120 SAY "Se ateapta pana la 2 minute pentru conectare... " CONNECT " SAY "Conectat, acum se autentifica...\n" ogin: account ssword: pass $ \c SAY "Ok, Autentificat...\n" etc ... Aceasta secvena va prezenta utilizatorului doar irurile SAY, iar toate detaliile scriptului vor ramane ascunse. De exemplu, daca scriptul de mai sus funcioneaza, utilizatorul va vedea: Se apeleaza furnizorul dvs. de servicii de internet (ISP)... Se ateapta pana la 2 minute pentru conectare... Conectat, acum se autentifica... Ok, Autentificat... IRURI REPORT Un ir report este similar cu irul ABORT. Diferena consta in faptul ca irurile i toate caracterele pana la urmatorul caracter de control, cum ar fi un retur de carucior, sunt scrise in fiierul de raport. irurile de raport pot fi utilizate pentru a izola rata de transmisie a irului de conectare a modemului i pentru a returna valoarea catre utilizatorul chat-ului. Analiza logica a irului de raport are loc impreuna cu alte procesari ale irului, cum ar fi cautarea irului de ateptare. Utilizarea aceluiai ir pentru o secvena de raportare i de anulare nu este probabil foarte utila, insa este posibila. irurile de raport pentru a nu modifica codul de finalizare a programului. Aceste iruri de ,,raport" pot fi specificate in script folosind secvena REPORT. Aceasta se scrie in script ca in exemplul urmator: REPORT CONNECT ABORT BUSY " ATDT5551212 CONNECT " ogin: account Aceasta secvena nu va atepta nimic; apoi va trimite irul ATDT555121212 pentru a forma numarul de telefon. irul ateptat este CONNECT. Daca se primete irul CONNECT, se executa restul scriptului. In plus, programul va scrie in fiierul de ateptare irul ,,CONNECT" plus orice caractere care il urmeaza, cum ar fi rata de conectare. IRURI CLR_REPORT Aceasta secvena permite tergerea irurilor REPORT definite anterior. irurile REPORT sunt pastrate intr-o matrice de o dimensiune predeterminata (la momentul compilarii); CLR_REPORT va recupera spaiul pentru intrarile terse, astfel incat noile iruri sa poata utiliza acel spaiu. ECHO Opiunile de ecou controleaza daca ieirea de la modem este transmisa la stderr. Aceasta opiune poate fi definita cu ajutorul opiunii -e, dar poate fi controlata i prin cuvantul cheie ECHO. Perechea ,,ateapta-trimite" ECHO ON activeaza ecoul, iar ECHO OFF il dezactiveaza. Cu acest cuvant cheie putei selecta ce pari ale conversaiei trebuie sa fie vizibile. De exemplu, cu urmatorul script: ABORT 'BUSY' ABORT 'NO CARRIER' " ATZ OK\r\n ATD1234567 \r\n \c ECHO ON CONNECT \c ogin: account toate ieirile rezultate din configurarea i apelarea modemului nu sunt vizibile, dar incepand cu mesajul CONNECT (sau BUSY), totul va fi transmis. HANGUP Opiunile HANGUP controleaza daca o deconectare a modemului trebuie considerata sau nu ca o eroare. Aceasta opiune este utila in scripturile pentru sistemele de apelare care vor inchide i vor suna inapoi la sistemul dumneavoastra. Opiunile HANGUP pot fi ON sau OFF. Atunci cand HANGUP este stabilita la OFF i modemul inchide (de exemplu, dupa prima etapa de conectare la un sistem de apelare), chat va continua sa ruleze scriptul (de exemplu, ateapta primirea apelului i a doua etapa de conectare). De indata ce apelul primit este conectat, trebuie sa utilizai directiva HANGUP ON pentru a reinstala comportamentul normal al semnalului de inchidere. Iata un script de exemplu (simplu): ABORT 'BUSY' " ATZ OK\r\n ATD1234567 \r\n \c CONNECT \c 'Callback login:' call_back_ID HANGUP OFF ABORT "Autentificare greita" 'Callback Password:' Call_back_password TIMEOUT 120 CONNECT \c HANGUP ON ABORT "NO CARRIER" ogin:--BREAK--ogin: real_account etc ... TIMPUL DE ATEPTARE (TIMEOUT) Valoarea iniiala a timpului de ateptare este de 45 de secunde. Aceasta poate fi modificata cu ajutorul parametrului -t. Pentru a modifica valoarea timpului de ateptare pentru urmatorul ir de ateptare, se poate utiliza urmatorul exemplu: ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5 assword: hello2u2 Aceasta va schimba timpul de ateptare la 10 secunde atunci cand se ateapta la promptul login:. Timpul de ateptare este apoi modificat la 5 secunde atunci cand se ateapta la solicitarea parolei. Timpul de ateptare, odata modificat, ramane in vigoare pana cand este modificat din nou. TRIMITEREA EOT irul special de raspuns EOT indica faptul ca programul de chat trebuie sa trimita un caracter EOT catre staia de la distana. Aceasta este in mod normal secvena de caractere de sfarit de fiier. Dupa EOT nu se trimite un caracter de returnare. Secvena EOT poate fi incorporata in irul de trimitere folosind secvena ^D. GENERAREA INTRERUPERII (BREAK) irul special de raspuns BREAK va determina trimiterea unei condiii de intrerupere. Intreruperea este un semnal special pe emiator. Prelucrarea normala pe receptor este de a schimba rata de transmisie. Acesta poate fi utilizat pentru a parcurge ciclic ratele de transmisie disponibile pe staia de la distana pana cand vei putea primi o solicitare de conectare valida. Secvena de intrerupere poate fi incorporata in irul de trimitere utilizand secvena \K. SECVENE DE CONTROL irurile de ateptare i de raspuns pot conine secvene de control. Toate secvenele sunt legale in irul de raspuns. Multe dintre ele sunt legale in irul de ateptare. Cele care nu sunt valabile in secvena de ateptare sunt indicate astfel. " Ateapta sau trimite un ir de caractere nul. Daca trimitei un ir nul, se va trimite totui caracterul de retur. Aceasta secvena poate fi fie o pereche de apostrofuri, fie o pereche de caractere de ghilimele. \b reprezinta un caracter de backspace. \c Suprima linia noua de la sfaritul irului de raspuns. Aceasta este singura metoda de a trimite un ir de caractere fara un caracter de retur la sfarit. Acesta trebuie sa se afle la sfaritul irului de trimitere. De exemplu, secvena hello\c va trimite pur i simplu caracterele h, e, l, l, o. (nevalabil in ateptare). \d Intarzie o secunda. Programul utilizeaza sleep(1) care va intarzia pana la maximum o secunda. (nu este valabil in ateptare). \K Introduce o intrerupere BREAK (nevalabil in ateptare). \n Transmitei un caracter de linie noua sau de salt de linie. \N Trimite un caracter nul. Aceeai secvena poate fi reprezentata prin \0. (nu este valabil in ateptare). \p Face o pauza de o fraciune de secunda. Intarzierea este de 1/10 de secunda. (nu este valabil in ateptare). \q Suprima scrierea irului in fiierul SYSLOG. irul ?????? este scris in jurnal in locul acestuia; (nu este valabil in ateptare). \r Trimite sau ateapta un retur de carucior. \s Reprezinta un caracter spaiu in irul de caractere. Acesta poate fi utilizat atunci cand nu este de dorit sa se citeze irurile care conin spaii. Secvena 'Salut Andrei!' i Salut\sAndrei! sunt identice. \t Trimite sau ateapta un caracter de tabulare. \T Trimite irul de numar de telefon specificat cu opiunea -T; (nevalabil in ateptare). \U Trimite irul de numere de telefon 2, aa cum este specificat cu opiunea -U; (nevalabil in ateptare). \\ Trimite sau ateapta un caracter de bara oblica inversa. \ddd Restrange cifrele octale (ddd) intr-un singur caracter ASCII i trimite acest caracter; (unele caractere nu sunt valabile in ateptare). ^C Substituie secvena cu caracterul de control reprezentat de C. De exemplu, caracterul DC1 (17) este prezentat sub forma ^Q; (unele caractere nu sunt valabile in ateptare). VARIABILE DE MEDIU Variabilele de mediu sunt disponibile in cadrul scripturilor de chat, daca opiunea -E a fost specificata in linia de comanda. Metacaracterul $ este utilizat pentru a introduce numele variabilei de mediu care trebuie inlocuita. In cazul in care substituia eueaza, deoarece variabila de mediu solicitata nu este definita, se inlocuiete variabila cu nothing. CODURI DE IEIRE Programul chat se va incheia cu urmatoarele coduri de finalizare. 0 Incheierea normala a programului. Aceasta indica faptul ca scriptul a fost executat fara erori pana la incheierea normala. 1 Unul sau mai muli parametri nu sunt valabili sau un ir de ateptare a fost prea mare pentru tampoanele interne. Acest lucru indica faptul ca programul nu a fost executat corect. 2 A aparut o eroare in timpul executarii programului. Aceasta se poate datora unei operaii de citire sau de scriere care a euat dintr-un anumit motiv sau la primirea de catre chat a unui semnal, cum ar fi SIGINT. 3 Un eveniment de depaire a timpului de ateptare a avut loc atunci cand a existat un ir ateptare fara a avea un ir subiacent ,,-trimitere". Acest lucru poate insemna ca nu ai programat corect scriptul pentru aceasta condiie sau ca a avut loc un eveniment neateptat i irul ateptat nu a putut fi gasit. 4 A aparut primul ir marcat ca fiind o condiie ABORT. 5 Cel de-al doilea ir marcat ca fiind o condiie ABORT a aparut. 6 Al treilea ir marcat ca fiind o condiie ABORT a aparut. 7 Al patrulea ir marcat ca fiind o condiie ABORT a aparut. ... Celelalte coduri de terminare sunt, de asemenea, iruri marcate ca o condiie ABORT. Cu ajutorul codului de terminare, este posibil sa se determine ce eveniment a pus capat scriptului. Este posibil sa se decida daca irul ,,BUSY" a fost primit de la modem, spre deosebire de ,,NO DIAL TONE". In timp ce primul eveniment poate fi incercat din nou, al doilea va avea probabil puine anse de reuita in timpul unei noi incercari. CONSULTAI I Informaii suplimentare despre scripturile chat pot fi gasite in documentaia UUCP. Scriptul chat a fost preluat din ideile propuse de scripturile folosite de programul uucico. uucico(1), uucp(1) DREPTURI DE AUTOR Programul chat este in domeniul public. Aceasta nu este licena publica GNU. Daca se rupe, atunci putei pastra ambele bucai. TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Chat versiunea 1.22 22 mai 1999 CHAT(8)