CHAT(8) System Manager's Manual CHAT(8) NAZWA chat - zautomatyzowany skrypt dialogu z modemem SKLADNIA chat [ opcje ] skrypt OPIS Program chat definiuje wymiane rozmow miedzy komputerem a modemem. Jego glownym celem jest zestawianie polaczen pomiedzy demonem Point-To-Point (pppd), a procesem pppd drugiego konca. OPCJE -f plik Odczytuje skrypt rozmowy z pliku plik. Uzywanie tej opcji wyklucza parametry skryptowe rozmowy. Uzytkownik musi miec prawa do odczytu tego pliku. Dozwolonych jest wiele wierszy w pliku. Do oddzielania napisow powinny byc uzywana spacja lub tabulacja. -t czas-oczekiwania Ustawia czas oczekiwania dla odbioru oczekiwanego lancucha. Jesli lancuch nie zostanie odebrany w limicie czasowym, to lancuch odpowiedzi nie jest wysylany. Moze byc natomiast wyslana alternatywna odpowiedz, lub skrypt moze zostac przerwany w wypadku braku takiej alternatywy. Program chat zakonczy wtedy dzialanie, zwracajac niezerowy kod bledu. -r plik-raportu Ustaw plik dla wyjscia napisow raportujacych. Jezeli uzywa sie slowa kluczowego REPORT, napisy wynikowe sa zapisywane do tego pliku. Jesli opcja ta nie jest uzywana, mozna i tak uzywac slow REPORT, ktore uzyja pliku stderr. -e Zaczyna z wlaczona opcja echo. Mozna ja rowniez wlaczyc lub wylaczyc w danym miejscu skryptu chat za pomoca slowa kluczowego ECHO. Przy wlaczeniu opcji echo, cale wyjscie z modemu jest przekierowane na standardowe wyjscie bledow. -E Wlacza podmiane zmiennych srodowiskowych w skryptach chat za pomoca standardowej skladni $xxx -v Zada uruchomienia skryptu chat w trybie szczegolowym. Program chat bedzie wtedy logowal wszystkie teksty uzyskane od modemu, a takze te, ktore sam wysyla. Domyslnie logi wysylane sa do SYSLOG, metode logowania mozna zmienic opcjami -S lub -s. -V Zada uruchomienia skryptu chat w trybie szczegolowym, ale na standardowe wyjscie bledow. Program bedzie wowczas logowal wszelki tekst otrzymany z modemu i lancuchy wyjsciowe wysylane do modemu do urzadzenia stderr. Urzadzenie to jest zwykle lokalna konsola stacji uruchamiajacej program chat lub pppd. -s Uzywa standardowego wyjscia bledow. Wszystkie komunikaty loga z -v wraz z komunikatami o bledach beda wysylane na stderr. -S Nie uzywa SYSLOG. Domyslnie, komunikaty o bledach sa wysylane do SYSLOG-a. Opcja -S powoduje, ze komunikaty z opcji -v i wiadomosci o bledach nie beda tam wysylane. -T numer telefonu Przekazuje dowolny lancuch, zwykle numer telefonu, ktory zostanie wstawiony w miejsce metaznaku \T w wysylanym lancuchu. -U numer telefonu 2 Przekazuje drugi lancuch, zwykle numer telefonu, ktory zostanie wstawiony w miejsce metaznaku \U w wysylanym lancuchu. Jest to przydatne przy wybieraniu adaptera terminala ISDN wymagajacego dwoch numerow. script Jesli skrypt nie jest podany opcja -f w pliku, to skrypt script jest wlaczany jako parametry programu chat. SKRYPT ROZMOWY Skrypt rozmowy definiuje komunikacje. Skrypt sklada sie z jednej lub wiekszej ilosci par napisow "oczekuj-wysylaj", oddzielonych spacjami z ewentualnymi dodatkowymi parami "podoczekuj-podwysylaj", oddzielonymi kreska, jak w przykladzie: ogin:-BREAK-ogin: ppp ssword: hello2u2 Znaczy to, ze chat powinien oczekiwac napisu "ogin:". Jesli to zawiedzie (minie czas oczekiwania), to wysyla na drugi koniec sekwencje przerwania (break) i oczekuje napisu "ogin:". Jesli jednak pierwszy "ogin:" zostanie odebrany, sekwencja przerwania nie jest wysylana. Gdy juz uzyskalismy znak zachety logowania, chat sprobuje wyslac napis ppp i oczekiwac na "ssword:". Gdy go odczyta, to wysle haslo hello2u2. Na zakonczenie lancucha odpowiedzi zwykle wysylany jest znak powrotu karetki. Nie jest on oczekiwany w napisie "oczekiwania", chyba ze jest specyficznie wskazany, przez uzycie sekwencji \r. Sekwencja oczekiwania powinna zawierac tylko to, co potrzebne do zidentyfikowania lancucha. Poniewaz normalnie jest przechowywana na dysku, nie powinna zawierac informacji zmiennych. Generalnie nie jest akceptowane podgladanie lancuchow czasu, identyfikacji sieci, lub innych zmiennych jako sekwencji oczekiwanej. Aby pomoc poprawic znaki, ktore moga byc zmienione w sekwencji poczatkowej, oczekuj raczej napisu "ogin:" niz "login:". Jest mozliwe, ze poczatkowy znak bedzie odebrany z bledem, a wtedy mozna nigdy nie znalezc oczekiwanego napisu, chociaz zostal on wyslany przez system. Z tego powodu, skrypty oczekuja "ogin:" zamiast "login:" i "ssword:" zamiast "password". Bardzo prosty skrypt moze wygladac nastepujaco: ogin: ppp ssword: hello2u2 Innymi slowy, oczekuj ....ogin:, wyslij ppp, oczekuj ...ssword:, wyslij hello2u2. W rzeczywistosci proste skrypty sa raczej rzadkie. Powinno sie przynajmniej zalaczyc sekwencje "pod-oczekiwania". Prosze na przyklad rozwazyc nastepujacy skrypt: ogin:--ogin: ppp ssword: hello2u2 Bylby to lepszy skrypt niz poprzedni. Oczekiwalby na ten sam znak zachety login:, lecz gdyby go nie odebral, wyslalby sekwencje powrotu i oczekiwal dalej. Gdyby wiec szum linii znieksztalcil pierwszy znak zachety, to pozniejsze przeslanie pustej linii zazwyczaj wygeneruje nowe. KOMENTARZE Komentarze mozna osadzic w skrypcie programu chat. Komentarz to wiersz zaczynajacy sie znakiem # (kratka) w kolumnie 1. Sa ignorowane przez program chat. Jesli znak "#" ma znalezc sie jako pierwszy znak oczekiwanej sekwencji, oczekiwany lancuch nalezy ujac w cudzyslow. Aby czekac na zachete rozpoczynajaca sie # (kratka) mozna uzyc skladni podobnej do ponizszej: # Teraz czekaj na zachete i wyslij lancuch wylogowania '# ' logout WYSYLANIE DANYCH Z PLIKU Jesli lancuch przeznaczony do wyslania zaczyna sie malpa (@), to reszta lancucha jest traktowana jako nazwa pliku do odczytania, z ktorego wziety jest lancuch do wyslania. Jesli ostatnim znakiem odczytanych danych jest znak nowego wiersza, to jest on usuwany. Plik moze byc nazwanym potokiem (lub fifo), a nie tylko zwyklym plikiem. W ten sposob chat moze komunikowac sie z innym programem np. z programem pytajacym uzytkownika o haslo i otrzymujacym wpisane haslo. LANCUCHY PRZERWANIA (ABORT) Wiele modemow raportuje status polaczenia jako lancuch. Lancuchy te to np. CONNECTED, NO CARRIER, lub BUSY. Czesto jest wlasciwym wylaczenie skryptu, jesli modem nie polaczy sie z drugim koncem. Przy jednej probie moze odebrac BUSY, podczas gdy nastepnym razem zdarzyc sie moze NO CARRIER. Te lancuchy "przerywania" moga byc podane w skrypcie przy uzyciu sekwencji ABORT. Jest to zapisane w ponizszym przykladzie: ABORT BUSY ABORT 'NO CARRIER' " ATZ OK ATDT5551212 CONNECT Sekwencja ta nie bedzie niczego oczekiwac; pozniej wysle ATZ. Oczekiwana odpowiedzia jest OK. Po odebraniu OK, wysylany jest lancuch ATDT5551212, wykrecajacy numer telefonu. Oczekiwanym napisem jest CONNECT. Jesli odebrany zostanie lancuch CONNECT, to reszta skryptu jest wykonywana. Jednak jesli modem spotka sie z zajeta linia, to wysle napis BUSY. Lancuch ten bedzie odpowiadal sekwencji przerwania. Skrypt wtedy zakonczy dzialanie, poniewaz uzyskal rozkaz przerwania. Podobnie bedzie, gdy skrypt uzyska lancuch NO CARRIER. LANCUCHY CLR_ABORT Sekwencja ta pozwala cofnac wczesniej ustawiony lancuch ABORT. Lancuchy ABORT sa przechowywane w tablicy o z gory zdefiniowanym rozmiarze (w trakcie kompilacji), CLR_ABORT odzyskaja przestrzen usunietych wpisow, dzieki czemu nowe lancuchy beda mogly jej uzyc. LANCUCHY "POWIEDZ" (SAY) Dyrektywa SAY pozwala skryptowi na wyslanie lancucha do uzytkownika i na terminal przez standardowe wyjscie bledow. Jesli chat zostal uruchomiony przez pppd dzialajacego jako demona (odlaczonego od kontrolujacego go terminala), to standardowe wyjscie bledow jest zwykle przekierowywane do pliku /etc/ppp/connect-errors. Lancuchy SAY musza byc ujete w pojedynczy lub podwojny cudzyslow. Jesli w lancuchu ma pojawic sie wyswietlany powrot karetki i wysuw wiersza, to trzeba dodac je jawnie do lancucha. Lancuchy SAY mozna wykorzystac do przekazania wiadomosci o postepie w sekcjach skryptu z wlaczona opcja "ECHO OFF", lecz gdzie wciaz istotne jest powiadomienie uzytkownika o tym co sie dzieje. Oto przyklad: ABORT BUSY ECHO OFF SAY "Wybieranie numeru dostawcy...\n" " ATDT5551212 TIMEOUT 120 SAY "Czekanie do 2 minut na polaczenie... " CONNECT " SAY "Polaczono, teraz nastapi zalogowanie...\n" ogin: account ssword: pass $ \c SAY "OK. Zalogowano...\n" etc ... Ta sekwencja wypisze uzytkownikowi same lancuchy SAY, a wszystkie detale skryptu pozostana ukryte. W powyzszym przykladzie uzytkownik zobaczy: Wybieranie numeru dostawcy... Czekanie do 2 minut na polaczenie... Polaczono, teraz nastapi zalogowanie... OK. Zalogowano... LANCUCHY RAPORTOWE Napis raportowy jest bardzo podobny do napisu przerywania. Roznica polega na tym, ze lancuchy i wszystkie znaki do nastepujacego znaku sterujacego, takiego jak CR, sa wypisywane w pliku raportu. Lancuchy raportu moga byc uzywane do izolowania ze napisu polaczenia ciagu okreslajacego szybkosc transmisji i zwracania wartosci uzytkownikowi. Analiza logiki napisu raportowego wystepuje w polaczeniu z innym przetwarzaniem napisu, takim jak podgladanie napisu oczekiwanego. Uzycie tego samego napisu jako przerywajacy i raportowy, prawdopodobnie nie jest zbyt uzyteczne, jednak jest mozliwe. Lancuchy raportowe nie wplywaja na kod zakonczenia programu. Napisy raportowe moga byc podawane w skrypcie przy uzyciu sekwencji REPORT. Jest to zapisywane w skrypcie jak w nastepujacym przykladzie. REPORT CONNECT ABORT BUSY " ATDT5551212 CONNECT " ogin: account Sekwencja ta nie bedzie oczekiwac niczego; a potem wysle napis ATDT5551212, wykrecajacy numer telefonu. Oczekiwanym napisem jest CONNECT. Jesli lancuch ten jest odebrany, wykonywana jest reszta skryptu. Dodatkowo, program wydrukuje do oczekujacego pliku napis CONNECT plus dodatkowo znaki, ktore za nim podazaly, takie jak szybkosc polaczenia. LANCUCHY CLR_REPORT Sekwencja ta pozwala cofnac wczesniej ustawiony lancuch REPORT. Lancuchy REPORT sa przechowywane w tablicy o z gory zdefiniowanym rozmiarze (w trakcie kompilacji), CLR_REPORT odzyskaja przestrzen usunietych wpisow, dzieki czemu nowe lancuchy beda mogly jej uzyc. ECHO Opcje echo kontroluja czy wyjscie z modemu jest przekierowywane na standardowe wyjscie bledow. Opcje te mozna ustawic za pomoca -e, lecz mozna ja kontrolowac rowniez slowem kluczowych ECHO. Para "oczekuj-wysylaj" ECHO ON wlacza ja, a ECHO OFF - wylacza. Slowo kluczowe pozwala wybranie czesci konwersacji ktora ma byc widoczna. Przykladowo w ponizszym skrypcie: ABORT 'BUSY' ABORT 'NO CARRIER' " ATZ OK\r\n ATD1234567 \r\n \c ECHO ON CONNECT \c ogin: account niewidoczne sa komunikaty wynikajace z konfiguracji modemu i wybierania numeru, lecz poczynajac od wiadomosci CONNECT (lub BUSY) wszystko jest widoczne. HANGUP Opcja HANGUP kontroluje, czy rozlaczenie modemu ma byc traktowane jako blad, czy tez nie. Przydatne w skryptach do systemow telefonicznych, ktore rozlaczaja sie i pozniej oddzwaniaja. Opcja HANGUP moze byc wlaczona (ON) lub wylaczona (OFF). Gdy HANGUP jest ustawione na OFF i modem rozlacza sie (np. po pierwszej fazie logowania do systemu oddzwaniajacego) chat kontynuuje wykonywanie skryptu (np. oczekujac na polaczenie przychodzace i druga faze logowania). Zaraz po zawiazaniu polaczenia przychodzacego powinno sie uzyc dyrektywy HANGUP ON w celu ponownego przywrocenia zwyklego zachowania. Oto (prosty) przykladowy skrypt: 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 ... CZAS OCZEKIWANIA Poczatkowa wartosc czasu oczekiwania to 45 sekund. Moze to byc zmienione przy uzyciu parametru -t. Aby zmienic wartosc czasu oczekiwania dla nastepnego z oczekiwanych napisow, mozna uzyc nastepujacego przykladu: ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5 assword: hello2u2 Zmieni to czas oczekiwania na 10 sekund podczas oczekiwania zachety login:. Nastepnie czas oczekiwania jest zmieniany na 5 sekund, podczas oczekiwania na czas oczekiwania password. Zmieniony czas oczekiwania pozostaje efektywny az do nastepnej zmiany. WYSYLANIE EOT Specjalny napis odpowiedzi, EOT, wskazuje, ze program chat powinien wyslac znak EOT na drugi koniec. Normalnie jest to sekwencja End-of-file (koniec pliku). Nie przesylany jest po niej znak return. EOT mozna umiescic w wysylanym lancuchu za pomoca sekwencji ^D. GENEROWANIE PRZERWANIA (BREAK) Specjalny lancuch odpowiedzi, BREAK, spowoduje wyslanie warunku przerwania. Sygnal ten jest specjalnym sygnalem. Normalna akcja u odbierajacego go jest zmiana szybkosci transmisji. Moze byc uzywany do przeskakiwania przez dostepne szybkosci transmisji, az bedzie mozna odebrac prawidlowy znak zachety logowania. Przerwanie mozna umiescic w wysylanym lancuchu za pomoca sekwencji \K. SEKWENCJE UCIECZKI Lancuchy oczekiwania i odpowiedzi moga zawierac sekwencje ucieczki. Wszystkie sekwencje sa poprawne w lancuchu odpowiedzi. Wiele jest prawidlowe w napisie oczekiwania. Te, ktore nie sa poprawne w sekwencji oczekiwania, sa zaznaczone. " Oczekuje lub wysyla lancuch zerowy. W takim przypadku wysylany jest znak return. Sekwencja ta moze byc zarowno para apostrofow, jak i cudzyslowow. \b reprezentuje znak backspace. \c Powstrzymuje generowanie nowego wiersza na koncu lancucha odpowiedzi. Jest to jedyna metoda wysylania napisu bez konczacego go znaku return. Musi byc wysylana na koncu napisu. Na przyklad sekwencja hello\c przesle po prostu znaki h, e, l, l, o. (nieprawidlowe w lancuchu oczekiwania). \d Zatrzymuje sie na sekunde. Program uzywa sleep(1), ktory zatrzyma sie maksymalnie na sekunde. (nieprawidlowe w lancuchu oczekiwania) \K Wstawia BREAK (nieprawidlowe w lancuchu oczekiwania) \n Przesyla znak nowego wiersza lub powrotu wysuwu wiersza. \N Przesyla znak null. Ta sama sekwencja moze byc reprezentowana przez \0. (nieprawidlowe w lancuchu oczekiwania) \p Pauzuje na czesc sekundy. Opoznienie wynosi 1/10 sekundy. (nieprawidlowe w lanuchu oczekiwania) \q Zabrania zapisywania napisu do pliku SYSLOG. Do dziennika w jego miejscu wpisywany jest napis ???????. (nieprawidlowe w lanuchu oczekiwania) \r Wysyla lub oczekuje znak powrotu karetki. \s Reprezentuje znak spacji w lanuchu. Moze to byc uzywane, gdy nie jest pozadanym cytowanie lancuchow zawierajacych spacje. Sekwencje 'HI TIM' i HI\sTIM sa identyczne. \t Wysyla lub oczekuje znaku tabulacji. \T Wysyla lancuch numeru telefonu podany opcja -T. (nieprawidlowe w lanuchu oczekiwania) \U Wysyla lancuch numeru telefonu 2 podany opcja -U. (nieprawidlowe w lanuchu oczekiwania) \\ Wysyla lub oczekuje znak odwrotnego ukosnika. \ddd Przeksztalca osemkowe cyfry (ddd) w pojedynczy znak ASCII i wysyla ten znak. (niektore znaki nie sa uzywane w sekwencji oczekiwania) ^C Podmienia sekwencje znakiem sterujacym (z Ctrl) reprezentowanym przez C. Na przyklad znak DC1 (17) jest pokazywany jako ^Q. (niektore znaki nie sa uzywane w sekwencji oczekiwania) ZMIENNE SRODOWISKOWE Zmienne srodowiskowe sa dostepne w skryptach chat, jesli w wierszu polecenia podano opcje -E. Metaznak $ jest uzywany do wprowadzenia nazwy zmiennej srodowiskowej do podmiany. Jesli zamiana zawiedzie, poniewaz taka zmienna nie jest ustawiona, nic nie jest zamieniane zmienna. KODY ZAKONCZENIA Program chat konczy swoje dzialanie z nastepujacymi kodami wyjscia. 0 Normalne zakonczenie programu. Znaczy to, ze skrypt zostal wykonany bez bledow. 1 Jeden, lub wiecej parametrow bylo nieprawidlowych, lub napis oczekiwania byl zbyt duzy dla buforow wewnetrznych. Wskazuje to, ze program nie byl prawidlowo uruchomiony. 2 Pojawil sie blad podczas uruchomiania programu. Moze to byc spowodowane bledem operacji odczytu lub zapisu, lub odebraniem przez program sygnalu takiego, jak SIGINT. 3 Nastapilo miniecie czasu oczekiwania dla napisu oczekiwania, ktory nie mial napisu "pod-wyslania". Moze to oznaczac, ze nie zaprogramowano wlasciwie skryptu na ten warunek, lub ze pojawilo sie jakies nieoczekiwane zdarzenie i oczekiwany napis nie mogl zostac znaleziony. 4 Pojawil sie pierwszy lancuch oznaczony jako warunek ABORT. 5 Pojawil sie drugi lancuch oznaczony jako warunek ABORT. 6 Pojawil sie trzeci lancuch oznaczony jako warunek ABORT. 7 Pojawil sie czwarty lancuch oznaczony jako warunek ABORT. ... Inne kody wyjscia sa rowniez lancuchami oznaczonymi jako ABORT. Uzywajac kodu wyjscia, mozliwym jest okreslenie, ktore zdarzenie zakonczylo skrypt. Jest mozliwym okreslenie czy modem otrzymal np. napis "BUSY" czy "NO DIAL TONE". Podczas gdy pierwsze zdarzenie wymaga drugiej proby, drugie w ten sposob moze miec mniejsze szanse. ZOBACZ TAKZE Dodatkowe informacje o skryptach chat mozna znalezc w dokumentacji UUCP. Skrypty programu chat powstaly z idei zaproponowanych przy skrypt programu uucico. uucico(1), uucp(1) PRAWA AUTORSKIE Program chat jest znajduje sie w domenie publicznej. Nie jest to publiczna licencja GNU. Autorzy nie udzielaja zadnej gwarancji. TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Przemek Borys i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Chat Wersja 1.22 22 maja 1999 CHAT(8)