Tłumaczenie P. Kucharski Network Working Group C. Kalt Request for Comments: 2811 kwiecień 2000 Aktualizuje: 1459 Kategoria: Informacyjne IRC: Zarządzanie kanałem Status tego memo Memo to zawiera informacje dla społeczności internetowej. Nie specyfikuje standardu internetowego żadnego rodzaju. Dystrybucja tego memo nie jest ograniczona. Notatka o prawach własności Copyright (C) The Internet Society (2000). All Rights Reserved. [...] 2. Definicja kanału Kanał to nazwana grupa jednego lub więcej użytkowników, którzy otrzymują wiadomości adresowane do tego kanału. Kanał jest opisany przez jego nazwę, właściwości i aktualnych członków. 2.1 Nazwy Nazwy kanałów to napisy (zaczynające się od '&', '#', '+' lub '!') o długości nie większej niż pięćdziesiąt (50) znaków. Nazwy kanałów nie są wrażliwe na wielkość liter. Oprócz wymagania, żeby pierwszy znak był '&', '#', '+' lub '!' (od tej pory nazywanymi "prefiksem kanału"), nazwa kanału nie może zawierać żadnych spacji (' '), znaku CTRL-G (^G lub ASCII 7) ani przecinka (','). Dodatkowo dwukropek (':') jest używany jako znak rozdzielający maskę kanału. [...] 2.2 Zakres istnienia kanałów Kanał jest znany przez jeden lub więcej serwerów sieci IRC. Użytkownik może zostać członkiem tylko tych kanałów, które są znane serwerowi, do którego użytkownik jest podłączony. Wszystkie serwery, które znają dany kanał, muszą ze sobą sąsiadować po to, żeby wiadomości adresowane na ten kanał mogły zostać wysłane do wszystkich członków kanału. Kanały z prefiksem '&' są lokalne dla serwera, na którym został utworzone. Inne kanały są znane jednemu lub większej ilości serwerów, które są połączone w sieć, w zależności od maski kanału: Jeśli kanał nie posiada maski, kanał jest znany wszystkim serwerom. Jeśli kanał ma maskę, to kanał ten może być znany tylko tym serwerom, które pasują do maski kanału. Ponieważ inne serwery nie mają pojęcia o istnieniu takiego kanalu, obszar uformowany przez serwery mające nazwę pasującą do maski musi być ciągły, żeby wszystkie te serwery znały ten kanał. Użycie masek kanałów jest najlepsze w połączeniu z maskowaniem serwerów [IRC-SERVER]. 2.3 Właściwości kanału Każdy kanał ma swoje właściwości, które są zdefiniowane w trybach kanałowych. Tryby kanałowe mogą być zmieniane przez członków kanału. Tryby wpływają na sposób, w jaki serwery zarządzają kanałami. Kanały z prefiksem '+' nie posiadają trybów kanałowych. Oznacza to, że wszystkie tryby są zdjęte za wyjątkiem trybu kanału 't', który jest ustawiony. 2.4 Uprzywilejowani członkowie kanału Aby umożliwić członkom kanału zachowanie porządku i jakiejś kontroli nad kanałem, niektórzy członkowie kanału są uprzywilejowani. Tylko ci członkowie mogą przeprowadzać następujące akcje na kanale: INVITE - zaprasza klienta na kanał z ustawionym trybem +i KICK - usuwa klienta z kanału MODE - zmienia tryby kanału, a także przywileje członków PRIVMSG - wysyła wiadomości na kanał z ustawionym trybem +m TOPIC - zmienia temat kanału na kanale z ustawionym trybem +t 2.4.1 Operatorzy kanału Operatorzy kanału (znani także jako "chanopi") na danym kanale są uważani za "właścicieli" tego kanału. Własność kanału jest współdzielona między wszystkich operatorów kanału. Operatorzy kanału są identyfikowani przez znak '@' przed ich nickiem przy wszystkich komendach łączących nicki i dany kanał (tj. odpowiedzi na komendy NAMES, WHO czy WHOIS). Jako że kanały zaczynające się od prefiksu '+' nie posiadają trybów kanałowych, żaden z członków tego kanału nie może mieć statusu operatora kanału. 2.4.2 Twórca kanału Użytkownik, który tworzy kanał z prefiksem '!' jest identyfikowany jako "twórca kanału". Po utworzeniu kanału użytkownikowi jest także nadawane uprawnienie operatora kanału. Twórca kanału ma możliwość ustawiania niektórych trybów kanału, których nie mogą ustawiać operatorzy kanału. Twórca kanału jest odróżniany od operatora kanału przez wydanie specjalnej komendy MODE. Przeczytaj dokument "Protokół klienta IRC" [IRC-CLIENT], żeby dowiedzieć się więcej na ten temat. [...] 4. Tryby kanału Kanały mają dostępne następujące tryby: O - status "twórcy kanału" (tylko serwer) o - przyznaje/zabiera przywilej operatora kanału v - przyznaje/zabiera przywilej głosu a - włącza anonimowość na kanale (bez możliwości wyłączenia) i - kanał tylko na zaproszenie m - moderacja kanału n - możliwość wysyłania wiadomości spoza kanału q - tryb cichy (tylko serwer) p - tryb prywatny s - tryb sekretny r - włącza reopowanie kanału t - zastrzega ustawianie tematu tylko dla operatorów k - klucz kanału (hasło); l - limit użytkowników na kanale b - maska użytkowników, którzy nie mogą wejść na kanał (tzw. ban) e - maska użytkowników, którzy mogą wejść na kanał mimo bana I - maska użytkowników, którzy mogą wejść bez zaproszenia na kanał z ustawionym trybem tylko na zaproszenie Jeśli nie zastrzeżono inaczej, wszystkie te tryby mogą być zmieniane przez operatorów kanałów przy użyciu komendy MODE zdefiniowanej w dokumencie "Protokół klienta IRC" [IRC-CLIENT]. 4.1 Status członków kanału Tryby w tej kategorii przyjmują nick jako argument i wpływają na przywileje przyznawane użytkownikowi. 4.1.1 Status twórcy kanału Tryb 'O' jest używany tylko w powiązaniu z bezpiecznymi kanałami (z prefiksem '!') i nie może być zmieniany przez użytkowników. Serwery używają go do nadania użytkownikowi tworzącemu kanał status "twórcy kanału". 4.1.2 Status operatora kanału Tryb 'o' jest używany do przełączania przywileju operatora kanału. 4.1.3 Przywilej głosu Tryb 'v' jest używany do przełączania przywileju głosu. Użytkownicy z nadanym przywilejem głosu mogą rozmawiać na kanałach moderowanych. (Zobacz sekcja 4.2.3 (Kanał moderowany)). 4.2 Tryby kanału Tryby w tej kategorii są używane do zdefiniowania właściwości, które wpływają na sposób działania kanału. 4.2.1 Tryb anonimowy Tryb kanału 'a' definiuje kanał jako anonimowy. Oznacza to, że wiadomości od użytkowników wysyłane na ten kanał muszą być zamaskowane przez serwer. W celu zamaskowania nadawca wiadomości jest zmieniony na "anonymous!anonymous@anonymous." (czyli pseudoużytkownik o nicku "anonymous", nazwie użytkownika "anonymous" z komputera o nazwie "anonymous."). [...] Na kanałach z prefiksem '&' ta flaga może zostać włączona przez operatora kanału, a na kanałach z prefiksem '!' tylko przez twórcę kanału. Ten tryb nie może być dostępny na innych typach kanałów. Odpowiedzi na komendy WHOIS, WHO i NAMES nie mogą odkryć obecności innych użytkowników na kanałach z ustawionym trybem anonimowości. 4.2.2 Kanał na zaproszenie Kiedy kanał ma ustawiony tryb 'i', użytkownicy mogą wejść na kanał tylko wtedy, gdy ich maska pasuje do listy zaproszeń (patrz sekcja 4.3.2) lub gdy zostali zaproszeni przez operatora kanału. Tryb ten ogranicza możliwość użycia komendy INVITE (zobacz "IRC: Protokół klienta" [IRC-CLIENT]) do operatorów kanału. 4.2.3 Kanał moderowany Ustawienie trybu 'm' jest używane do kontrolowania, kto może mówić na kanale. Gdy jest ustawiony, tylko operatorzy kanału i członkowie kanału z przywilejem głosu mogą wysyłać wiadomości na kanał. Tryb ten oddziałuje tylko na użytkowników. 4.2.4 Zakaz wysyłania wiadomości spoza kanału Gdy kanał ma ustawiony tryb 'n', tylko członkowie kanału mogą wysyłać wiadomości na ten kanał. Tryb ten oddziałuje tylko na użytkowników. 4.2.5 Cichy kanał Tryb 'q' jest używany tylko przez serwery. Gdy jest ustawiony, ogranicza rodzaj informacji wysyłanych do użytkowników o kanale; wejścia i wyjścia innych użytkowników oraz zmiany nicków nie są wysyłane. Z punktu widzenia użytkownika kanał ma tylko jednego użytkownika. Tryb ten jest używany przy tworzenia specjalnych lokalnych kanałów, na które serwer wysyła informacje o jego działaniu. Sposób ten jest bardziej wydajny i elastyczny niż flaga użytkownika 's', zdefiniowana w RFC 1459 [IRC]. 4.2.6 Kanały prywatne i sekretne Tryb kanału 'p' jest używany do zaznaczenia kanału jako prywatnego, a 's' -- sekretnego. Oba tryby są podobne i ukrywają istnienie kanału przed innymi użytkownikami. Oznacza to, że nie ma możliwości na poznanie nazwy kanału, jeśli się nie jest jego członkiem. Innymi słowy, kanały te muszą być pominięte w odpowiedzi na komendy takie jak WHOIS. Kiedy kanał jest sekretny, dodatkowo dla komend takich jak TOPIC, LIST i NAMES serwer będzie działał tak, jakby kanał nie istniał. Trzeba zauważyć, że jest jeden wyjątek od tej zasady: serwery poprawnie odpowiedzą na komendę MODE. Tryby kanału 'p' i 's' nie mogą być ustawione równocześnie. Jeśli tryb 'p' ustawia serwer, a tryb 's' jest już ustawiony na kanale, zmiana ta zostanie zignorowana. Zdarza się tak tylko w trakcie leczenia splitu (wspomnianej w dokumencie "IRC: Protokół serwera" [IRC-SERVER]). 4.2.7 Tryb reopowania Tryb 'r' jest dostępny tylko na kanałach z prefiksem '!' i może zostać ustawiony tylko przez twórcę kanału. Tryb ten jest używany do zapobiegania bezopiu na kanale. Gdy ten tryb jest ustawiony, kanał, który stracił wszystkich operatorów na czas dłuższy niż czas reopu, powoduje uruchomienie mechanizmu reopowania jednego lub wszystkich członków kanału. Procedura ta jest opisana dokładniej w sekcji 5.2.5 (Mechanizm reopowania). 4.2.8 Temat Tryb 't' jest używany do ograniczenia użycia komendy TOPIC tylko dla operatorów kanału. 4.2.9 Limit użytkowników Limit użytkowników może zostać ustawiony na kanale trybem 'l'. Kiedy liczba użytkowników na kanale osiągnie wartość limitu, serwer nie może pozwolić na wejście na kanał lokalnym użytkownikom, chyba że zostali zaproszeni przez operatora kanału. Wartość limitu jest podawana w odpowiedzi na komendę MODE tylko członkom kanału. 4.2.10 Klucz Kiedy kanał ma ustawiony klucz (przez użycie trybu 'k'), serwery muszą odrzucać próby wejścia na kanał bez poprawnego klucza. Klucz jest podawany w odpowiedzi na komendę MODE tylko członkom kanału. 4.3 Kontrola dostępu do kanału Ostatnia kategoria trybów jest używana do kontrolowania dostępu do kanału. Tryby te jako argumenty przyjmują maskę. W celu ograniczenia wielkości bazy z trybami kontroli dostępu, serwery mogą ograniczyć ilość takich trybów dla każdego kanału. Jeśli takie ograniczenie jest założone, musi dotyczyć tylko klientów. Limit taki powinien być jednorodny w całej sieci. 4.3.1 Bany i wyjątki Kiedy użytkownik próbuje wejść na kanał, jego serwer sprawdza, czy adres użytkownika pasuje do którejś z masek banów ('b') dla tego kanału. Jeśli tak, użytkownik nie może wjść na kanał, chyba że jego adres pasuje także do jednej z masek wyjątków ('e') tego kanału. Serwery nie mogą pozwolić zabanowanym członkom kanału na mówienie na tym kanale, chyba że członek taki jest równocześnie operatorem kanału lub ma przywilej głosu. (Zobacz sekcja 4.1.3 (Przywilej głosu)). Zabanowany użytkownik może wejść na kanał pod warunkiem, że został zaproszony przez operatora kanału. 4.3.2 Lista zaproszeń Na kanały tylko na zaproszenie (patrz sekcja 4.2.2 (Kanał na zaproszenie)) mogą wejść bez zaproszenia użytkownicy, których adres pasuje do listy zaproszeń ('I') na tym kanale. 5.1 Śledzenie ostatnio używanych kanałów Mechanizm ten jest znany popularnie jako "Channel Delay" i zwykle dotyczy kanałów z prefiksem '#' (patrz sekcja 3.1 "Kanały standardowe"). Kiedy zdarza się split sieci, serwery powinny pamiętać, które kanały straciły operatorów kanału w wyniku takiego rozłączenia. Kanały te są w specjalnym stanie, który trwa przez pewien czas. W tym stanie kanały nie znikają. Jeśli wszyscy członkowie kanału opuszczą ten kanał, staje się on niedostępny - klienci lokalnego serwera nie mogą wejść na ten kanał dopóki jest pusty. Kanał niedostępny staje się dostępny ponownie albo gdy użytkownik innego serwera wejdzie na ten kanał (jako wynik leczenia splitu), albo gdy upłynie okres ochrony (w tym wypadku kanał przestaje istnieć i może zostać utworzony ponownie). [...] 5.2.5 Mechanizm reopowania Gdy na kanale jest bezopie przez czas dłuższy niż "czas reopu" i ma ustawiony tryb 'r' (patrz sekcja 4.2.7 (Tryb reopowania)), serwery IRC mają za zadanie przywrócenie na kanale statusu operatora kanału niektórym jego członkom. Dokładna logika używana przez obecną implementację jest opisana poniżej. Serwery mogą używać innego mechanizmu, ale jest zalecane, żeby wszystkie serwery w sieci używały tego samego mechanizmu, aby zachować spójność i sprawiedliwość. Z tych samych powodów "czas reopu" powinien być taki sam na wszystkich serwerach całej sieci. [...] a) mechanizm reopowania jest włączony po losowym czasie po upłynięciu "czasu reopu". To powinno ograniczyć możliwość wyzwolenia mechanizmu w tym samym czasie (dla tego samego kanału) na różnych serwerach. b) jeśli kanał jest mały (pięciu (5) użytkowników lub mniej) i upłynął czas ochrony kanału ("channel delay"), serwer ma reopować wszystkich członków kanału, jeżeli przynajmniej jeden z jego członków korzysta z tego serwera. c) jeśli kanał jest mały (pięciu (5) użytkowników lub mniej) i upłynął "czas reopu", serwer ma reopować wszystkich członków kanału. d) w pozostałych przypadkach należy reopować przynajmniej jednego członka kanału, w sposób wbudowany w serwer. Jeśli serwer tego nie zrobi, metoda musi być taka, że zrobi to inny serwer. Metoda powinna być taka sama na wszystkich serwerach sieci. Dobrym sposobem jest zwykła losowość. (Aktualna implementacja próbuje wybrać lokalnego członka kanału, który nie był zbyt długo bezczynny, a jeśli takiego nie ma, to odkłada akcję na później w nadziei, że inny serwer znajdzie takiego niezbyt bezczynnego klienta. Jest to trochę zbyt skomplikowane, gdyż tylko serwer klienta zna jego czas bezczynności.) 6.3 Kolizje i tryby kanału Dokument "IRC: Protokół serwera" [IRC-SERVER] opisuje, w jaki sposób dane są wymieniane, gdy dwa serwery połączą się ze sobą. Efektem kolizji kanałów jest ich złączenie, tj. wynikowy kanał za użytkowników ma wszystkich użytkowników tych kanałów na obu serwerach przed połączeniem. Podobnie każdy serwer wysyła tryby kanałowe do drugiego serwera. [...] Jeśli jakiś tryb jest ustawiony na jednym serwerze, po połączeniu musi być także ustawiony na drugim serwerze (za wyjątkiem opisanym w sekcji 4.2.6). Tematy nie są przesyłane w trakcie połączenia. Jednakże tryby 'l' i 'k' zostają zamienione, jeśli były różne na obu serwerach przed połączeniem, i nie ma żadnego mechanizmu, który by pozwolił ustalić, który tryb powinien zostać. Naprawianie takich rozbieżności zostało pozostawione operatorom kanału. 6.4 Wyczerpanie zasobów Tryby z maskami jako parametrami zdefiniowane w sekcji 4.3 powodują, że serwery IRC (i sieć) są narażone na proste nadużycia: pojedynczy operator kanału może ustawić tak dużo różnych masek na kanale, że spowoduje to wyczerpanie się pamięci serwera, a także przepustowości sieci (informacje te są bowiem propagowane do innych serwerów). Z tego powodu zalecane jest, żeby na ilość trybów z maskami na jednym kanale był zakładany limit, tak jak o tym wspomniano w sekcji 4.3. Dodatkowo mogą zostać użyte bardziej skomplikowane mechanizmy, aby uniknąć ustawiania na jednym kanale redundantnych masek. [...] 10. Odnośniki [...] [IRC] Oikarinen, J. and D. Reed, "Protokół IRC", RFC 1459, maj 1993. [IRC-ARCH] Kalt, C., "IRC: Architektura", RFC 2810, kwiecień 2000. [IRC-CLIENT] Kalt, C., "IRC: Protokół klienta", RFC 2812, kwiecień 2000. [IRC-SERVER] Kalt, C., "IRC: Protokół serwera", RFC 2813, kwiecień 2000.