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.