IRC ve mIRC Kullanıcılarının Buluşma Noktası
  Mobil Sohbet, Sohbet ve Sohbet Odaları




34Beğeni(ler)

Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 01 Nisan 2012, 17:03   #1
Çevrimdışı
Türkçe RFC 1459 (Tam Çeviri)


-- Sponsor Baglantı --


Aşağıda bulunan RFC 1459 dökümanının Türkçe çevirisinin tüm hakkı HelpEthos.Net'e aittir.

Çeviri : @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
Düzenleme : @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]


Ağ Çalışma Grubu
Request for Comments (RFC): 1459
J. Oikarinen
D. Reed
Mayıs 1993


İnternet Aktarmalı Sohbet Protokolü

Dökümanın İçeriği

Bu döküman internet topluluğu için deneysel bir protokolü anlatır. Gelişim için tartışma ve önerilere ihtiyaç vardır. Bu protokolün standartlaştırma şekli ve durumu için lütfen IAB (Internet Activities Board - İnternet Aktiviteleri Kurulu) Resmi Protokol Standartları'nın güncel nushasını kaynak gösteriniz.


Özet

IRC protokolü ilk olarak bir BBS (Bulletin Board System - Bilgisayarlı Bilgi Sistemi) üzerindeki kullanıcıların kendi aralarında yazışabilmeleri için hayata geçirildi ve son 4 yıl içinde çok ilerleme kaydetti. Şu an dünya çapında bir sunucular ağı ve kullanıcılarını taşıyor ve bu büyümeyle başa çıkmaya çalışıyor. Geçtiğimiz 2 yıl içinde ana IRC ağına bağlanan kullanıcıların ortalama sayısı 10 kat artmış durumdadır.

IRC protokolü, en yalın istemcisi sunucuya bağlanabilen bir soket program olan metin tabanlı bir protokoldür.


İÇİNDEKİLER

1. GİRİŞ
* 1.1 Sunucular
* 1.2 İstemciler (Kullanıcılar)
** 1.2.1 Operatörler
* 1.3 Kanallar
** 1.3.1 Kanal operatörleri

2. IRC TEKNİK ÖZELLİKLERİ
* 2.1 Genel Bakış
* 2.2 Karakter Kodları
* 2.3 Mesajlar
** 2.3.1 Sahte BNF (Backus-Naur Form) mesaj formatı
* 2.4 Numerik Cevaplar

3. IRC KAVRAMLARI
* 3.1 Birebir İletişim
* 3.2 Çoklu
** 3.2.1 Bir listeye
** 3.2.2 Bir gruba (kanala)
** 3.2.3 Bir host/sunucu mask'ine
* 3.3 Toplu
** 3.3.1 Kullanıcıdan kullanıcıya (İstemciden istemciye)
** 3.3.2 Kullanıcıdan sunucuya
** 3.3.3 Sunucudan sunucuya

4. MESAJ DETAYLARI
* 4.1 Bağlantı Kaydı
** 4.1.1 Password mesajı
** 4.1.2 Nick mesajı
** 4.1.3 User mesajı
** 4.1.4 Server mesajı
** 4.1.5 Oper mesajı
** 4.1.6 Quit mesajı
** 4.1.7 Server quit mesajı
* 4.2 Kanal İşlemleri
** 4.2.1 Join mesajı
** 4.2.2 Part mesajı
** 4.2.3 Mode mesajı
*** 4.2.3.1 Kanal modları
*** 4.2.3.2 Nick modları
** 4.2.4 Topic mesajı
** 4.2.5 Names mesajı
** 4.2.6 List mesajı
** 4.2.7 Invite mesajı
** 4.2.8 Kick mesajı
* 4.3 Sunucu Sorgu ve Komutları
** 4.3.1 Version mesajı
** 4.3.2 Stats mesajı
** 4.3.3 Links mesajı
** 4.3.4 Time mesajı
** 4.3.5 Connect mesajı
** 4.3.6 Trace mesajı
** 4.3.7 Admin mesajı
** 4.3.8 Info mesajı
* 4.4 Mesaj Gönderme
** 4.4.1 Private mesajlar
** 4.4.2 Notice mesajları
* 4.5 Kullanıcı Tabanlı Sorgular
** 4.5.1 Who sorgusu
** 4.5.2 Whois sorgusu
** 4.5.3 Whowas mesajı
* 4.6 Çeşitli Mesajlar
** 4.6.1 Kill mesajı
** 4.6.2 Ping mesajı
** 4.6.3 Pong mesajı
** 4.6.4 Error mesajı

5. OPSİYONEL MESAJLAR
* 5.1 Away Mesajı
* 5.2 Rehash Komutu
* 5.3 Restart Komutu
* 5.4 Summon Mesajı
* 5.5 Users Mesajı
* 5.6 Operwall Komutu
* 5.7 Userhost Mesajı
* 5.8 Ison Mesajı

6. CEVAPLAR
* 6.1 Hata Cevapları
* 6.2 Komut Yanıtları
* 6.3 Ayrılmış Numerikler

7. KULLANICI VE SUNUCU ONAYI

8. MEVCUT UYGULAMA DETAYLARI
* 8.1 Ağ Protokolü: TCP
** 8.1.1 Unix soketlerinin desteklenmesi
* 8.2 Komut Ayrıştırması
* 8.3 Mesaj İletimi
* 8.4 Bağlantı 'Canlılığı'
* 8.5 Sunucu-İstemci Bağlantısının Kurulması
* 8.6 Sunucu-Sunucu Bağlantısının Kurulması
** 8.6.1 Bağlantı sırasında durum bilgisi değişimi
* 8.7 Sunucu-İstemci Bağlantılarının Sonlandırılması
* 8.8 Sunucu-Sunucu Bağlantılarının Sonlandırılması
* 8.9 Nick Değişikliklerinin Takibi
* 8.10 İstemcilerin Flood Kontrolü
* 8.11 Tıkanmasız Aramalar
** 8.11.1 Hostname (DNS) aramaları
** 8.11.2 Username (Ident) aramaları
* 8.12 Konfigürasyon Dosyası
** 8.12.1 Kullanıcıların bağlanmasına izin verme
** 8.12.2 Operatörler
** 8.12.3 Sunucuların bağlanmasına izin verme
** 8.12.4 Administrivia
* 8.13 Kanal Üyeliği

9. MEVCUT PROBLEMLER
* 9.1 Ölçeklenirlik
* 9.2 Etiketler
** 9.2.1 Nickler
** 9.2.2 Kanallar
** 9.2.3 Sunucular
* 9.3 Algoritmalar

10. DESTEK VE KULLANILIRLIK

11. GÜVENLİK DURUMLARI

12. YAZARLARIN ADRESLERİ


1. GİRİŞ

IRC protokolü birkaç yıl içinde metin tabanlı görüşme sağlanabilmesi amacıyla tasarlanmıştır. Bu döküman güncel IRC protokolünü tanımlar.

IRC protokolü TCP/IP ağ protokolünü kullanan sistemler üzerinde geliştirilmiştir, ancak işlem gördüğü alanda kısıtlı kalması gibi bir kural yoktur.

IRC'nin kendisi kullanıcı-sunucu modeli yoluyla dağıtımlı bir şekilde birçok makine üzerinde çalışmaya uygun bir telekonferans sistemidir. Tipik bir IRC düzeneği, sunucunun kullanıcılar veya diğer sunucuların bağlanacağı bir merkez nokta oluşturması ve istenen mesaj iletimleri ve çoklaması gibi işlevleri gerçekleştirmesidir.

* 1.1 Sunucular

Kullanıcıların birbirleri ile yazışmak için bağlanabileceği ve diğer sunucuların da bağlanarak bir IRC ağı kurabileceği bir nokta sağlayan sunucular, IRC'nin belkemiğini oluşturur. IRC sunucuları için sağlanmış olan tek ağ konfigürasyonu dalları yayılmakta olan bir ağaç şemasına benzer, bu şemada her sunucu diğerleri için merkez düğüm pozisyonundadır.


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


:
[ vb. ]
:

[ Şema 1. IRC sunucu ağı formatı ]

* 1.2 İstemciler (Kullanıcılar)

Bir kullanıcı, bir sunucuya bağlanan bir başka sunucu dışındaki her şeydir. Her kullanıcı diğer kullanıcılardan maksimum 9 karakter olan nickleri ile ayrılır. Hangi karakterlerin nicklerde kullanılabileceği ve hangilerinin kullanılamayacağını görmek için gramer kuralları protokolünü inceleyiniz. Nicke ek olarak, tüm sunucuların bütün kullanıcılar ile ilgili şu bilgilere sahip olması gerekir: kullanıcının kullanıyor olduğu host'un isim bilgileri, kullanıcının o host üzerindeki isim bilgisi (identd) ve kullanıcının bağlı olduğu sunucu bilgisi.

** 1.2.1 Operatörler

IRC ağında gerekli miktarda düzenin sağlanabilmesi için özel bir statüye sahip kullanıcıların ağ üzerinde genel bakım işlevlerini kullanmasına izin verilir. Operatörlere verilmiş olan güçler 'tehlikeli' olarak nitelendirilebilse bile gereklidirler. Operatörler uzun süreli ağ yönlendirmesi gibi zararlı durumları engellemek için sunucuları ağa bağlayabilme/bağlantılarını koparabilme gibi temel görevleri yerine getirebilir nitelikte olmalıdırlar. Buna ihtiyaç duyulduğunda, burada tartışılan protokol operatörlerin sadece bu gibi işlevleri kullanabiliyor olmalarını sağlar. (4.1.7 (SQUIT) ve 4.3.5 (CONNECT) bölümlerine bakınız.)

Operatörlerin daha tartışılır bir yetkisi ise ağa bağlı bulunan bir kullanıcıyı zor kullanarak uzaklaştırmaktır, yani operatörler herhangi bir kullanıcının sunucu ile bağlantısını kesme yetkisine sahiptir. Bu yetkinin durumu biraz hassastır, çünkü kötüye kullanımı hem yıkıcı hem de sinir bozucudur. Bu tarz bir eylem ile ilgili daha fazla bilgi almak için 4.6.1 (KILL) bölümüne bakınız.

* 1.3 Kanallar

Kanal, bir ya da daha fazla kullanıcının oluşturduğu isimlendirilmiş bir gruptur. Bu gruba dahil olan tüm kullanıcılar, kanala gönderilen mesajları alırlar. Kanal, ilk kullanıcı giriş yaptığı an oluşturulur ve son kullanıcı kanalı terkettiği an yok olur. Bir kanal var olduğu sürece her kullanıcı kanalın ismini kullanarak referans gösterebilir.

Kanal isimleri '&' ya da '#' karakterleri ile başlarlar ve 200 karaktere kadar uzayabilirler. İlk karakterin & ya da # olması kuralı dışında kanal isimlerindeki tek kısıtlama boşluk bırakılamıyor olması, ^G (ASCII 7) ya da virgül (,) kullanılamıyor olmasıdır. (Virgül kanalları ayırmak için kullanılan bir list işlecidir.)

Bu protokol tarafından desteklenen iki çeşit kanal vardır. İlki ağa bağlı olan tüm sunucular tarafından tanınan dağıtımlı kanallardır. Bu kanalların simgeleri # ile gösterilir ve ağ üzerindeki bütün kullanıcılar bu kanallara girebilirler. İkincisi ise sadece kanalın bulunduğu sunucu üzerindeki kullanıcıların girebileceği kanallardır, bunlar ise & ile gösterilirler. Bu iki kanal çeşidinin de üzerinde kişisel kanalların özelliklerini değiştirebilecek çeşitli kanal modları bulunur. Ayrıntılı bilgi için 4.2.3 (MODE komutu) bölümüne bakınız.

Bir kanal oluşturmak ya da oluşmuş bir kanala dahil olmak için kullanıcının kanala girmesi, yani ''join'' gerçekleştirmesi gerekir. Eğer kanal, kullanıcı kanala girmeden önce mevcut değilse, girişle birlikte kanal oluşturulur ve oluşturan kullanıcı kanal operatörü olur. Eğer kanal hali hazırda mevcutsa, kullanıcının kanala giriş isteği yani ''join'' denemesi kanalın modları ile alakalı olarak sağlanır ya da engellenir. Örneğin, kanal davet edilenlere açık (+i) modda ise, kullanıcı ''kanaldan biri tarafından'' davet edilmediği sürece kanala giremez. Protokolün bir parçası olarak bir kullanıcı aynı anda birden fazla kanalda bulunabilir, ancak maksimum 10 gibi bir limit hem tecrübeli hem de acemi kullanıcılar için yeterli görülür. Ayrıntılı bilgi için 8.13 bölümüne bakınız.

Eğer IRC ağı iki sunucu arasındaki kopukluk yüzünden bölünürse, muhtemelen kanal iki sunucudan birinde var olmaya devam etmeyecektir, ancak ikisinde birden açık kalmaya devam ederse, sadece o sunucularda bulunan kullanıcılar kanalda kalacaktır. Link tekrar kurulduğunda iki sunucu birbirine o kanalda hangi kullanıcıların bulunuyor olduğunu ve kanal modlarını bildirir. Eğer kanal iki tarafta birden mevcutsa, girişler ve modlar kapsamlı bir şekilde tanımlanır, böylece kurulan yeni bağlantı sonrası hangi kullanıcıların kanalda olduğu ve kanalın hangi modlara sahip olduğu her iki sunucu tarafından belirlenir.

** 1.3.1 Kanal operatörleri

Bir kanaldaki kanal operatörü (''chop'' ya da ''chanop'' olarak da ifade edilir) o kanalın 'sahibi' kabul edilir. Bu statünün tanınması için kanal operatörleri kanalın işleyişini ve huzurunu korumaları adına bazı yetkilerle donatılmıştır. Kanal operatörleri, bir kanalın sahibi olarak yaptıkları herhangi bir şey için, kötü niyetli de olsa, mazeret belirtmek durumunda değildirler. Bu gibi durumlarda bir IRC operatöründen yardım istenebilir, ya da kullanıcı kanalı terkeder, başka bir kanala gider ya da kendi kanalını yaratır.

Sadece kanal operatörleri tarafından kullanılabilen komutlar şöyledir:

KICK - Bir kullanıcıyı kanaldan atmak için kullanılır.
MODE - Kanalın modlarını değiştirmek için kullanılır.
INVITE - Bir kullanıcıyı kanala davet etmek için kullanılır. (+i modu)
TOPIC - +t modundaki bir kanalın kanal başlığını değiştirmek için kullanılır.

Kanal operatörleri kanalda nicklerinin yanındaki @ işareti ile belirtilirler. (NAMES, WHO ve WHOIS komutlarında da bu işaret görülür.)


2. IRC TEKNİK ÖZELLİKLERİ

* 2.1 Genel Bakış

Burada tanımlanan protokol hem sunucu-sunucu hem de kullanıcı-sunucu bağlantıları için kullanılmaktadır. Ancak kullanıcı bağlantıları üzerinde daha çok kısıtlamalar vardır, çünkü bu bağlantılar sunucu bağlantılarına göre 'güvenilemez' olarak nitelendirilirler.

* 2.2 Karakter Kodları

Özel bir karakter grubu belirlenmemiştir. Protokol, sekizliler oluşturan 8 bitlik kodlardan oluşan bir grup üzerine kurulmuştur. Her mesaj bu sekizlilerden herhangi bir miktarda içerebilir, ancak bazı sekizli değerleri mesaj sınırlayıcıları olarak işleyen kontrol kodları yerine kullanılmaktadır.

8 bitlik bir protokol olmasına bakılmaksızın, sınırlayıcılar ve anahtar kelimeler protokolün USASCII birimi ve telnet bağlantısı için en kullanışlı şekilde olması için tasarlanmıştır.

IRC'nin Iskandinav kökeni sebebiyle {}| karakterleri sırasıyla []\ karakterlerinin küçük harfleri olarak kabul edilirler. Bu iki nickin denkliğinin belirlenmesi açısından önemli bir durumdur.

* 2.3 Mesajlar

Sunucular ve kullanıcılar birbirlerine bir cevap yaratan ya da yaratmayan mesajlar gönderirler. Eğer gönderilen mesaj geçerli bir komut içeriyorsa, daha sonraki bölümlerde de anlatılacağı gibi kullanıcı bir cevap beklemelidir ancak bu da bir cevap için sonsuza kadar beklenmesi gerektiği şeklinde anlaşılmamalıdır, kullanıcı-sunucu ve sunucu-sunucu arasındaki iletişim esasında eşzamanlı değildir.

Her IRC mesajı 3 ana bölümden oluşur. Prefix (opsiyonel), komut ve komut parametreleri (maksimum 15 adet olabilir). Prefix, komut ve tüm komut parametreleri bir (veya daha fazla) ASCII boşluk karakteri ile birbirinden ayrılırlar (0x20).

Prefix'in varlığı bir adet ASCII kolon karakteri ile gösterilir. (':', 0x3b), bu mesajın ilk karakteri olmak zorundadır. Kolon ile prefix arasında bir boşluk olmamalıdır. Prefix, sunucular tarafından mesajın gerçek kaynağını belirtmek için kullanılır. Eğer mesajda prefix bulunmuyorsa, mesajın alındığı bağlantı tarafından gönderildiği varsayılır. Kullanıcılar mesaj gönderirken prefix kullanmamalıdırlar, kullanacak olsalar dahi tek geçerli prefix kullanıcı ile ilişkilendirilen kayıtlı nickidir. Eğer prefix ile tanımlanmış olan kaynak, sunucunun dahili veritabanında bulunmuyorsa ya da kaynak mesajın ulaştığı link'ten değil başka bir link'ten bağlantı kurmuşsa, sunucu mesajı sessizce görmezden gelmelidir.

Komut ya geçerli bir IRC komutu olmalıdır, ya da ASCII tablosunda gösterilen 3 basamaklı sayılardan biri olmalıdır.

IRC mesajları daima CR-LF ikilisi ile sınırlandırılmış satırlardır, ve bu mesajlar uzunlukta CR ve LF (Carriage Return (Satırbaşı) - Line Feed (Satır Besleme - Satırsonu)) de dahil olmak üzere 512 karakteri geçmemelidir. Yani komut ve parametreleri için izin verilen maksimum karakter sayısı 510'dur. Mesaj satırlarının devamı için herhangi bir şart yoktur. Bu konudaki güncel uygulamalar hakkında 7. bölümden ayrıntılı bilgi edinebilirsiniz.

** 2.3.1 Sahte BNF (Backus-Naur Form) mesaj formatı

Protokol mesajlarının bitişik sekizli akışından ayrılması gerekmektedir. Bunun çözümü için de CR ile LF karakterleri mesaj ayırıcıları olarak tasarlanmıştır. Mesajlar arasındaki CR-LF dizisinin kullanımını herhangi bir problem olmaksızın sağlamak adına boş mesajlar görmezden gelinir.

Oluşturulan mesaj <middle> veya <trailing> öğeleri ile eşleşen prefix, komut ve komut parametreleri olarak kısımlara bölünür.

Bunun için BNF gösterimi:

<mesaj> ::= [':' <prefix> <SPACE> ] <komut> <parametreler> <crlf>
<prefix> ::= <sunucuadı> | <nick> [ '!' <identd> ] [ '@' <host> ]
<komut> ::= <harf> { <harf> } | <sayı> <sayı> <sayı>
<SPACE> ::= ' ' { ' ' }
<parametreler> ::= <SPACE> [ ':' <trailing> | <middle> <parametreler> ]

<middle> ::= <*Boş olmayan* ve SPACE, NUL, CR ya da LF karakteri içermeyen, ilki ':' olmayan herhangi bir sekizli dizisi>
<trailing> ::= <*Boş* da olabilen, NUL, CR ya da LF içermeyen herhangi bir sekizli dizisi>
<crlf> ::= CR LF

NOTLAR:

1) <SPACE> sadece boşluk karakter(ler)iden oluşur (0x20). Özellikle dikkate alınmalıdır ki TABULATION (sıralama) ve bütün diğer kontrol karakterleri NON-WHITE-SPACE (beyaz olmayan boşluk) karakterleri olarak kabul edilir.

2) Parametre listesini çıkardıktan sonra, <middle> ya da <trailing> farketmeksizin tüm parametreler eşittir. <trailing> parametreler arasında boşluk olmasını sağlayan sentaktik bir hiledir.

3) CR ve LF karakterlerinin parametre dizilerinde görülmüyor olması mesaj yapısından kaynaklanır. Bu daha sonra değiştirilebilir.

4) NUL karakteri mesaj yapısında bulunmaz, bir parametrenin içinde de bulunabilir, ancak normal C dizilerinde ekstra karışıklık yaratabilir. Bu yüzden mesaj içinde NUL kullanımına izin verilmemektedir.

5) Son parametre boş bir dizi olabilir.

6) Genişletilmiş prefix kullanımı (['!' <identd> ] ['@' <host> ]) sunucu-sunucu iletişimlerinde kullanılmamalı ve sadece sunucudan kullanıcıya gönderilen mesajlarda, kullanıcılara mesajın kim tarafından gönderildiği ile ilgili ekstra sorgu gerektirmeksizin daha yararlı bilgiler sağlamak adına kullanılmalıdır.

Protokol mesajlarının çoğunluğu ayrılmış parametre dizileri için listedeki yerlerine göre yazdırılmış ilave şemantik ve sentaks (anlambilim ve sözdizimi) tayin ederler. Örneğin, birçok sunucu komutu, komuttan sonraki ilk parametreyi bir hedef listesi olarak görecektir, bunu aşağıdaki gibi tanımlayabiliriz:

<hedef> ::= <kime> [ "," <hedef> ]
<kime> ::= <kanal> | <identd> '@' <sunucu ismi> | <nick> | <mask>
<kanal> ::= ('#' | '&') <karakter dizisi>
<sunucu ismi> ::= <host>
<host> ::= İzin verilen host ismi listesini ayrıntılı olarak görmek için RFC 952'ye bakınız [DNS:4]
<nick> ::= <harf> { <harf> | <sayı> | <özel karakter> }
<mask> ::= ('#' | '$') <karakter dizisi>
<karakter dizisi> ::= <SPACE, BELL, NUL, CR, LF ve virgül (',') dışındaki herhangi bir 8bitlik kod>

Diğer parametre sentaksları:

<kullanıcı> ::= <nonwhite> { <nonwhite> }
<harf> ::= 'a' ... 'z' | 'A' ... 'Z'
<sayı> ::= '0' ... '9'
<özel karakter> ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}'
<nonwhite> ::= <SPACE (0x20), NUL (0x0), CR (0xd), ve LF (0xa) dışındaki herhangi bir 8bitlik kod>

* 2.4 Numerik Cevaplar

Sunucuya gönderilen mesajların hemen hepsi bir tür cevap oluşturur. Bunlardan en yaygın olanı hem cevap hem de hatalar için olan numerik cevaplardır. Numerik cevap gönderen prefix'i, 3 basamaklı bir numerik ve mesajın hedefini içeren tek bir mesaj olarak gönderilir. Numerik cevapların bir kullanıcı tarafından oluşturulmasına izin verilmez, bu şekilde olan mesajlar sunucu tarafından iptal edilir. Diğer durumlarda, bir numerik cevap normal bir mesaj gibidir, sadece anahtar kelimesi bir harf dizisinden değil, 3 basamaklı sayılardan oluşur. Değişik numerik cevapların bir listesi 6. bölümde gösterilmiştir.


3. IRC KAVRAMLARI

Bu kısım IRC protokolündeki asıl düzenlemenin arkasındaki organizmayı ve güncel uygulamaların çeşitli tür mesajları nasıl ilettiğini tanımlamak için ayrılmıştır.


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Sunucular: A, B, C, D, E - Kullanıcılar: 1, 2, 3, 4

[ Şema 2. Küçük bir IRC ağı örneği ]

* 3.1 Birebir İletişim

Birebir iletişim temeli genellikle sadece kullanıcılar tarafından gerçekleştirilir, çünkü hemen hemen tüm sunucu-sunucu trafiği sunucuların sadece kendi aralarında iletişim kurmaları ile oluşmaz. Kullanıcıların birbirleriyle konuşmalarında güvenlik sağlamak ve her kullanıcıya ulaşabilmek için tüm sunucuların ağ sisteminin herhangi bir yönündeki kullanıcıya direkt olarak mesaj gönderebilmeleri gerekmektedir. Gönderilen mesajın yolu, ağ sistemi üzerindeki herhangi iki nokta arasındaki en kısa yoldur.

Aşağıdaki örneklerin her biri şema 2'de gösterilen şekil üzerinden açıklanmaktadır.

Örnek 1:
1 ve 2 numaralı kullanıcılar arasındaki bir mesaj sadece A sunucusu tarafından görülür, A sunucusu mesajı direkt olarak kullanıcı 2'ye gönderir.

Örnek 2:
1 ve 3 numaralı kullanıcılar arasındaki bir mesaj A ve B sunucuları ve kullanıcı 3 tarafından görülür. Diğer kullanıcı ya da sunucular mesajı göremezler.

Örnek 3:
2 ve 4 numaralı kullanıcılar arasındaki bir mesaj sadece A, B, C ve D sunucuları ve kullanıcı 4 tarafından görülür.

* 3.2 Çoklu

IRC'nin ana hedefi etkili ve basit bir görüşme için bir açık oturum sağlamaktır. IRC bunu sağlamak için çeşitli yöntemler içerir, bu yöntemlerin her biri farklı bir amaca hizmet etmektedir.

** 3.2.1 Bir listeye

Çoklu iletişimin en az etkili yolu bir kullanıcıdan bir listeye gönderilen mesajlardır. Bu şu şekilde sağlanır: kullanıcı, mesajının ulaştırılacağı bir hedef listesi belirler ve sunucu da mesajı kopyalayarak listedeki hedeflerin her birine ayrı ayrı iletir. Bu bir grup kullanımında olduğu kadar etkili değildir çünkü hedef listesi bölünür ve gönderilen mesajlar hedeflere çift olarak gönderilip gönderilmediği kontrol edilmeksizin iletilir.

** 3.2.2 Bir gruba (kanala)

IRC'de bir kanal bir çoklu yayın görevi üstlenir, varlıkları değişkendir çünkü sürekli olarak kanallara giriş yapan ve kanallardan çıkış yapan kullanıcılar bulunur. Bir kanalda gerçekleştirilen bir görüşme sadece o kanalda bulunan kullanıcıların bağlı olduğu sunuculara gönderilir. Eğer aynı kanalda bir sunucu üzerinden bağlanmış olan birden fazla kullanıcı bulunuyorsa, mesaj sadece bir kere olmak üzere o sunucuya gönderilir ve daha sonra sunucu tarafından o kanalda bulunan her kullanıcıya tek tek iletilir. Bu işlem daha sonra mesaj kanalın her üyesine iletilene kadar her kullanıcı-sunucu kombinasyonu için uygulanır.

Aşağıdaki örnekler şema 2 üzerinden açıklanmaktadır.

Örnek 4:
İçinde bir kullanıcı bulunan herhangi bir kanalda, kanala gönderilen mesajlar sunucuya gönderilir ve sonra başka bir yere gönderilmez.

Örnek 5:
Bir kanalda 2 kullanıcı vardır. Tüm mesajlar sanki kanaldan bağlantısız olarak iki kullanıcı arasında gönderilen özel mesajlarmış gibi iletilirler.

Örnek 6:
Kullanıcı 1, 2 ve 3 bir kanaldadır. Kanala gönderilen tüm mesajlar tüm kullanıcılara gönderilir ve sadece mesajın iletilmek için geçmesi gereken sunucular mesajı sanki tek bir kullanıcıya gönderilen özel bir mesajmış gibi iletirler. Eğer kullanıcı 1 bir mesaj gönderirse, mesaj kullanıcı 2'ye döner ve daha sonra sunucu B aracılığıyla kullanıcı 3'e iletilir.

** 3.2.3 Bir host/sunucu mask'ine

IRC operatörlerin büyük bir kullanıcı kesimine mesaj gönderebilmesi için host ya da sunucu mask mesajları sağlanmıştır. Bu mesajlar bulunduğu sunucu ya da host'u belirtilen mask'teki host'a veya sunucuya uyan tüm kullanıcılara gönderilir. Mesajlar sadece kullanıcıların bulundukları yerlere gönderilirler, bu bakımdan kanallarla benzerlik gösterirler.

* 3.3 Toplu

Bu mesajlar daha çok çoklu yayın mesajları olarak tanımlanırlar, tüm kullanıcılara ya da sunuculara ya da ikisine birden gönderilirler. Büyük bir sunucu ve kullanıcı ağında, tek bir mesaj ağ üzerinde istenen tüm hedeflere ulaştırılabilmesi için birçok mesaj trafiği yaratır.

Bazı mesajların tüm sunuculara gönderilmesinden başka seçenek yoktur, böylece her sunucu tarafından tutulan durum bilgisi sunucular arasında oldukça tutarlıdır.

** 3.3.1 Kullanıcıdan kullanıcıya (İstemciden istemciye)

Bir kullanıcıdan diğer bir tekil kullanıcıya gönderilen mesajlar için belirlenmiş herhangi bir sınıf yoktur.

** 3.3.2 Kullanıcıdan sunucuya

Kanal üyeliği, kanal modları, kullanıcı durumu vb. durum değişikliği bildiren mesajların büyük çoğunluğu gerçekleştiği sunucu tarafından tüm sunuculara bildirilmelidir, ve bu iletim istemci tarafından değiştirilemez.

** 3.3.3 Sunucudan sunucuya

Sunucular arasındaki mesajların çoğu bütün ''diğer'' sunuculara dağıtılırken, bu sadece bir kullanıcı, kanal ya da sunucuyu etkileyen herhangi bir mesaj için gereklidir. Bunlar IRC'de bulunan temel öğeler oldukları için, bir sunucu tarafından yaratılan neredeyse tüm mesajlar bağlı bulunan diğer tüm sunuculara gönderilir.


4. MESAJ DETAYLARI

İlerleyen sayfalarda IRC sunucusu ve istemci tarafından tanınan her mesajın açıklamalarını yapacağız. Bu bölümde tanımlanan bütün komutlar bu protokolü kullanan tüm sunucular tarafından uygulanmalıdır.

ERR_NOSUCHSERVER hatasının alındığı durumlar <sunucu> parametresinin bulunamadığı anlamına gelir. Sunucu bu cevaptan sonra o komut için başka bir cevap göndermez.

Kullanıcının bağlı bulunduğu sunucunun mesaj bütününü herhangi uygun bir hata vererek bölmesi beklenir. Eğer bir mesaj ayrıştırılırken sunucu kaçınılmaz/ciddi bir hata ile karşılaşırsa, kullanıcıya bir hata mesajı gönderilmeli ve ayrıştırma işlemi sonlandırılmalıdır. Ciddi hata yanlış bir komut, sunucu tarafından tanımlanmamış olan bir hedef (başka bir sunucu, nick ya da kanal bu kategoriye uyar), yetersiz parametre ya da kullanım yetkisinin bulunmaması olarak düşünülebilir.

Eğer bütün bir parametre dizisi kullanıldıysa, parametrelerin her birinin geçerliliği kontrol edilmeli ve uygun cevaplar kullanıcıya gönderilmelidir. Parametreler arasında ayraç olarak virgül kullanılmış olan mesajlarda ise her bir parametre için ayrı cevap gönderilmelidir.

Aşağıdaki örneklerde bazı mesajlar tam formatı kullanmıştır:

:İsim KOMUT parametre liste

Bu gibi örneklerde sunucular arasında geçişte olan''isim''den gönderilen bir mesaj gösterilir, orijinal göndericinin ismini içermesi önemlidir, çünkü uzak sunucu cevabı doğru şekilde gönderebilmek için doğru yola ihtiyaç duyar.

* 4.1 Bağlantı Kaydı

Burada anlatılan komutlar bir sunucu ile bir kullanıcı ya da sunucu olarak bir bağlantı oluşturmak ve bağlantıyı koparmak için kullanılır.

Bir kullanıcı ya da sunucunun bağlantısının tescillenmesi için bir ''PASS'' komutu gerekmez, ama bu sunucu mesajından önce gelmeli ya da NICK/USER kombinasyonundan sonra gelmelidir. Tüm sunucu bağlantılarının bir şifresi olması asıl bağlantılara belli bir güvenlik düzeyinin sağlanması açısından önemle tavsiye edilir. Bir kullanıcının giriş yapmak için izlemesi önerilen yol aşağıdaki gibidir:

1. Pass mesajı
2. Nick mesajı
3. User mesajı

** 4.1.1 Password mesajı

Komut: PASS
Parametreler: <şifre>

Pass komutu bir bağlantı şifresi koymak için kullanılır. Şifre, kurulan bağlantıyı tescilletmek için her seferinde kullanılabilir ve kullanılmalıdır. Şu anda bu durum kullanıcının NICK/USER kombinasyonunun gönderilmesinden önce ve sunucuların da herhangi bir SERVER komutundan önce bir PASS komutu kullanılmasını gerektirir. Şifreler sunucular için C/N satırlarında ve kullanıcılar için I satırlarında bulunanlarla aynı olması gerekmektedir. Kayda geçmeden önce birden fazla PASS komutu gönderilmesi mümkündür ancak sadece en son gönderilen doğrulama için kullanılır ve kayda alındıktan sonra bir daha değiştirilemez. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_ALREADYREGISTRED --> (Zaten kayıtlı)

Örnek:

PASS gizlişifre

** 4.1.2 Nick mesajı

Komut: NICK
Parametreler: <nick> [ <hopcount> ]

NICK mesajı bir kullanıcıya isim vermek ya da önceki ismi değiştirmek için kullanılır. <hopcount> parametresi sadece sunucu tarafından bir nickin ana sunucuya ne kadar uzakta olduğunu belirlemek için kullanılır. Lokal bir bağlantının hopcount değeri 0 (sıfır)'dır. Eğer bir kullanıcı tarafından gönderiliyorsa ignore edilmelidir.

Eğer bir sunucuya daha önceden başka bir kullanıcının almış olduğu bir nick için NICK mesajı ulaşırsa, bir nick collision (nick çatışması) oluşur. Bu çatışmanın sonucu olarak, nick ve bütün emsalleri sunucunun veritabanından kaldırılır ve diğer tüm sunucuların veritabanından da kaldırılması için bir KILL komutu uygulanır. Eğer nick çatışması durumunu yaratan bir nick değiştirme ise, orijinal (eski) nickin de kaldırılması gerekir.

Eğer sunucu direkt olarak bağlantı kurmuş bir kullanıcıdan özdeş bir NICK mesajı alırsa, lokal kullanıcı için ERR_NICKCOLLISION hatası meydana gelebilir, NICK komutu iptal edilir ve herhangi bir kill atılmaz. Numerik cevaplar:

ERR_NONICKNAMEGIVEN --> (Herhangi bir nick belirlenmedi)
ERR_ERRONEUSNICKNAME --> (Hatalı nick)
ERR_NICKNAMEINUSE --> (Nick şu an kullanımda)
ERR_NICKCOLLISION --> (Nick çatışması)

Örnek:

NICK Ekin --> ; Yeni nickin tanıtımı ''Ekin''.
:Ekin NICK Callisto --> ; Ekin nickini Callisto olarak değiştirdi.

** 4.1.3 User mesajı

Komut: USER
Parametreler: <kullanıcı ismi> <host ismi> <sunucu ismi> <realname>

USER mesajı bağlantı kurulurken yeni kullanıcı için bir kullanıcı ismi, host ismi, sunucu ismi ve realname belirlemek için kullanılır. Ayrıca IRC'ye yeni bir kullanıcı girdiğinde sunucular arası iletişimde de kullanılır, çünkü bir kullanıcı ancak hem NICK hem de USER istemciden alındıktan sonra kayıtlı sayılır.

Sunucular arasında USER, kullanıcının nickini prefix (ön ek) olarak almalıdır. Normalde host ismi ve sunucu ismi eğer komut direkt bağlantı kurmuş bir kullanıcıdan geliyorsa IRC ağı tarafından ignore edilir (güvenlik sebebiyle), ama sunucu-sunucu bağlantılarında kullanılırlar. Bu da NICK mesajının yeni bir kullanıcının girdiği her seferde IRC ağının geri kalanına gönderilmesi gerektiği anlamına gelir. (Sonrasında USER mesajı gönderilir)

Realname parametresi son parametre olmalıdır, çünkü realname boşluk karakteri içerebilir ve o şekilde tanınmasının sağlanması için bir kolon (':') prefix'i almalıdır.

Bir kullanıcının kullanıcı ismi hakkında sadece USER mesajına dayanarak yalan söylemesi kolay olduğu için bir Identity Server (Kimlik Sunucusu) kullanılması önerilir. Eğer kullanıcının bağlantı kurduğu host'ta böyle bir sunucu aktifse kullanıcı ismi ''Identity Server''dan alınan cevaba göre oluşturulur. Numerik Cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_ALREADYREGISTRED --> (Zaten kayıtlı)

Örnek:

USER Ekin tolmoon tolsun :Ronnie Reagan --> ; Kullanıcı kendini ''Ekin'' kullanıcı ismi ve ''Ronnie Reagan'' realname'i ile sunucuya tanıtıyor.
:testnick USER Ekin tolmoon tolsun :Ronnie Reagan --> ; USER komutunun ait olduğu nickin bulunduğu sunucular arasında gönderilen mesaj.

** 4.1.4 Server mesajı

Komut: SERVER
Parametreler: <sunucu ismi> <hopcount> <bilgi>

Server mesajı bir sunucuya yeni bir bağlantının diğer ucunda bir sunucu olduğunu bildirmek için kullanılır. Bu mesaj ayrıca sunucu verisini tüm ağa göndermek için de kullanılır. Ağa yeni bir sunucu bağlandığında bu bilgi tüm ağa gönderilir. <hopcount> tüm sunuculara diğer sunucuların ne kadar uzaklıkta olduğu ile ilgili dahili bilgiler vermek için kullanılır. Bütün bir sunucu listesi ile tüm sunucu ağının bir haritasını çıkarmak mümkün olurdu ancak hostmask'ler bunu engeller.

SERVER mesajı sadece (a) henüz kurulmamış ve kurulmaya çalışan bir sunucu bağlantısından ya da (b) var olan başka bir sunucu bağlantısından gelirse kabul edilmelidir, bu durumde SERVER mesajı o sunucunun arkasındaki yeni sunucuyu tanıtır.

SERVER komutu sonucunda alınan hataların hemen hemen hepsi bağlantının hedef sunucu tarafından sonlandırılması ile sonuçlanır. Hata cevapları numerik cevaplar yerine genellikle ''ERROR'' komutu kullanılarak gönderilir çünkü ERROR komutunun bu durumda çeşitli kullanışlı yönleri vardır.

Eğer bir SERVER mesajı ayrışmışsa ve hedef sunucu tarafından hali hazırda tanınmış olan bir sunucuyu tanıtmaya çalışıyorsa, mesajın geldiği bağlantı sonlandırılmalıdır çünkü çift bir geçit oluşur ve IRC ağacının çevrimsiz/düz yapısı bozulur. Numerik cevaplar:

ERR_ALREADYREGISTRED --> (Zaten kayıtlı)

Örnek:

SERVER helper.helpethos.net 1 :[help.helpethos.net] Experimental server --> ; Yeni sunucu helper.helpethos.net kendini tanıtıyor ve giriş yapmaya çalışıyor. Parantez içindeki isim helper.helpethos.net sunucusunu barındıran host'un ismidir.
:help.helpethos.net SERVER irc.helpethos.net 5
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
U Central Server --> ; help.helpethos.net sunucusu 5 hop uzaklıkta bulunan irc.helpethos.net sunucusunun link'idir.

** 4.1.5 Oper

Komut: OPER
Parametreler: <kullanıcı> <şifre>

OPER mesajı normal bir kullanıcının operatör yetkileri alması için kullanılır. <kullanıcı> ve <şifre> kombinasyonu operatör yetkileri kazandırır.

Eğer OPER komutunu gönderen kullanıcı doğru şifreyi girerse, sunucu ağın geri kalanını kullanıcının nicki için ''MODE +o'' kullanarak yeni operatör hakkında bilgilendirir.

OPER mesajı sadece kullanıcı-sunucu şeklindedir. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
RPL_YOUREOPER --> (Operatör oldunuz)
ERR_NOOPERHOST --> (Nickte oper erişimi yok)
ERR_PASSWDMISMATCH --> (Yanlış şifre)

Örnek:

OPER Ekin 123456 --> ; Ekin nickine verilmiş olan oper erişimini 123456 şifresini girerek alıyoruz.

** 4.1.6 Quit

Komut: QUIT
Parametreler: [<çıkış mesajı>]

Bir kullanıcı oturumu çıkış mesajı ile sonlandırılır. Sunucu bir QUIT mesajı gönderen kullanıcı ile olan bağlantısını koparır. Eğer bir ''çıkış mesajı'' belirtilmişse, varsayılan mesaj olan ''kullanıcının nicki'' yerine o mesaj gösterilecektir.

Netsplit (iki sunucu arasındaki bağlantının kopması) durumunda çıkış mesajı her iki sunucunun ismini bir boşluk ile ayırmak suretiyle içerir. Baştaki sunucu hala bağlı bulunulan, sondaki sunucu ise bağlantının sonlandırılmış olduğu sunucudur.

Eğer, başka bir sebeple, kullanıcının bağlantısı QUIT komutu kullanılmaksızın kopmuşsa (örneğin istemci düşer ve soket üzerinde EOF (End Of File (Dosya sonu)) durumu oluşur), sunucu çıkış mesajı kısmını bağlantının kopmasına sebep olan durumu belirten bir mesaj ile doldurur. Numerik cevabı yoktur.

Örnek:

QUIT İyi geceler. --> ; Tercih edilmiş mesaj formatı.

** 4.1.7 Server quit mesajı

Komut: SQUIT
Parametreler: <sunucu> <yorum>

SQUIT mesajı çıkış yapan ya da bağlantısı kopan sunucular hakkında bilgi vermek için kullanılır. Eğer bir sunucu başka bir sunucu ile bağlantısını koparmak isterse diğer sunucuya bir SQUIT mesajı göndermelidir, bu mesajda bağlantının koparılacağı sunucu ismi sunucu parametresi olarak kullanılır, daha sonra çıkış yapan sunucu ile bağlantı kesilir.

Bu komut ayrıca operatörlerin bir IRC ağının düzenini sağlaması ve koruması konusunda da yardımcıdır. Operatörler de bir uzak sunucu bağlantısı için SQUIT mesajı oluşturabilirler. Bu durumda, SQUIT mesajı operatör ile uzak sunucu arasındaki her bir sunucu tarafından ayrıştırılmalı ve aşağıda açıklandığı gibi her sunucu tarafından tutulan ağ görüntüsü güncellenmelidir.

<yorum> kısmı bir uzak sunucu (bağlı bulundukları sunucuya bağlı olmayan bir sunucu) için SQUIT komutu kullanan tüm operatörler tarafından kullanılmalı ve böylece diğer operatörler işlemin sebebi ile ilgili bilgi sahibi olmalıdır. <yorum> kısmı aynı zamanda sunucular tarafından bir hata ya da hata benzeri mesaj ile de doldurulabilir.

Koparılan bir bağlantının herhangi bir ucunda bulunan iki sunucu diğer sunuculara bir SQUIT mesajı göndererek link'li bulunan tüm sunuculara bilgi verir.

Benzer olarak, ağa bağlı bulunan diğer tüm sunuculara bağlantısı kopan link'teki tüm kullanıcılar ile ilgili QUIT mesajı da gönderilir. Buna ek olarak, bir split sonucu bir üye kaybeden bir kanaldaki tüm kullanıcılara da o üye ile ilgili QUIT mesajı gönderilir.

Eğer bir sunucu bağlantısı istenmeyen bir şekilde sonlanırsa, bu kopuşu tespit eden sunucu ağın geri kalanını bu bağlantının kopuşu ve <yorum> kısmında kopuş sebebi ile ilgili bilgilendirir. Numerik cevaplar:

ERR_NOPRIVILEGES --> (Bu komutu kullanma yetkiniz yok)
ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)

Örnek:

SQUIT hack.helpethos.net :Kötü Link ? --> ; hack.helpethos.net link'inin bağlantısı ''Kötü Link'' hatası yüzünden sonlanmıştır.
:Ekin SQUIT help.helpethos.net :Server out of control --> ; Ekin nicki ''help.helpethos.net'' link'ini ağdan çıkarmıştır çünkü sunucu kontrolden çıkmıştır.

* 4.2 Kanal İşlemleri

Bu grup mesajlar kanalların yönetimi, kanal modları ve kullanıcıları ile alakalıdır. Bunlar uygulanırken, ağın karşılıklı taraflarında bulunan iki kullanıcı komutlar gönderdiğinde ve bunlar birbiri ile çatıştığında kaçınılmaz durumlar oluşabilir. Ayrıca bir <nick> parametresi kullanıldığında sunucunun geçmiş kayıtları kontrol edip yakında değişiklik olup olmadığını görebilmesi için sunucuların bir nick geçmişi tutması gerekir.

** 4.2.1 Join mesajı

Komut: JOIN
Parametreler: <kanal>{,<kanal>} [<şifre>{,<şifre>}]

JOIN komutu bir kullanıcı tarafından bir kanala girmek için kullanılır. Kullanıcının kanala girme izni olup olmadığı kullanıcının bağlandığı sunucu tarafından kontrol edilir; diğer bütün sunucular mesajı alınca kullanıcıyı otomatik olarak kanala eklerler. Bu durumu etkileyebilen durumlar aşağıdaki gibidir:

1. Eğer kanal davetsel moda alınmışsa kullanıcı davet edilmelidir.
2. Kullanıcının nick/identd/host'u herhangi bir aktif ban ile eşleşmemelidir.
3. Eğer şifre konmuşsa, doğru şifre girilmelidir.

Bunlar MODE konusu altında ayrıntılı olarak anlatılacaktır. (Ayrıntılar için bölüm 4.2.3'e bakınız)

Bir kullanıcı kanala girdiğinde, kanalı etkileyen her komut ile ilgili notice mesajı alır. Bunlar MODE, KICK, PART, QUIT ve tabii ki PRIVMSG/NOTICE mesajlarını içerir. Tüm sunucuların kullanıcının nerede olduğunu ve o kanalda kimlerin olduğunu bilebilmesi için JOIN komutunun tüm sunuculara dağıtılması gerekir. Bu durum PRIVMSG/NOTICE mesajlarının kanala en uygun biçimde iletilmesini sağlar.

Eğer bir JOIN işlemi başarılı olursa, kullanıcıya kanalın başlığı (RPL_TOPIC kullanılarak) ve kanalda bulunan kullanıcıların listesi (RPL_NAMREPLY kullanılarak) gönderilir, bu liste kullanıcının kendi nickini de içerir. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_BANNEDFROMCHAN --> (Kanalda banlısınız)
ERR_INVITEONLYCHAN --> (Sadece davet edilenler girebilir)
ERR_BADCHANNELKEY --> (Kanal şifresi yanlış girildi)
ERR_CHANNELISFULL --> (Kanalın kullanıcı limiti dolu)
ERR_BADCHANMASK --> (Kanal ismi yanlış girildi)
ERR_NOSUCHCHANNEL --> (Böyle bir kanal bulunmuyor)
ERR_TOOMANYCHANNELS --> (Çok fazla kanalda bulunuyorsunuz)
RPL_TOPIC --> (Başlık mesajı verilir)

Örnekler:

JOIN #helpethos --> ; #helpethos kanalına giriş.
JOIN #helpethos helpkültür --> ; Şifresi helpkültür olan #helpethos kanalına giriş.
JOIN #helpethos,&helpquery helpkültür --> ; Şifresi helpkültür olan #helpethos kanalına ve şifresi bulunmayan &helpquery kanalına aynı anda giriş.
JOIN #helpethos,#help supreme,ethos --> ; Şifresi supreme olan #helpethos kanalına ve şifresi ethos olan #help kanalına aynı anda giriş.
JOIN #helpethos,#helpquery --> ; #helpethos ve #helpquery kanallarına aynı anda giriş.
:Ekin JOIN #helpethos --> ; Ekin nickinin #helpethos kanalına giriş mesajı.

** 4.2.2 Part mesajı

Komut: PART
Parametreler: <kanal>{,<kanal>}

PART mesajı, mesajı gönderen kullanıcının mesajda belirtilen kanal veya kanallardan ayrılmasını ve listelerinden çıkartılmasını sağlar. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_NOSUCHCHANNEL --> (Böyle bir kanal bulunmuyor)
ERR_NOTONCHANNEL --> (Kanalda değilsiniz)

Örnekler:

PART #helpethos --> ; #helpethos kanalından çıkış.
PART #helpethos,&helpquery --> ; #helpethos ve &helpquery kanallarından aynı anda çıkış.

** 4.2.3 Mode mesajı

Komut: MODE

MODE komutu çift amaçlı bir komuttur. Hem nicklerin hem de kanalların modlarının değiştirilmesi için kullanılır. Bu seçimin gerekçesi ise bir gün nicklerin kullanılmaz olacağı ve bunların yerine kanalların kullanılacağıdır.

MODE mesajları ayrıştırılırken, öncelikle tüm mesajın, sonra ortaya çıkan değişikliklerin ayrıştırılması ve iletilmesi önerilir.

*** 4.2.3.1 Kanal modları

Parametreler: <kanal> {[+|-]|o|p|s|i|t|n|b|v} [<limit>] [<nick>] [<banmask>]

MODE komutu operatörlerin kanal özelliklerini değiştirebilmesi için sağlanmıştır. Ayrıca kanal operatörlerinin operatör yetkisi alabilmesi için sunucu da mode değiştirebilir.

Çeşitli kanal modları aşağıdaki gibidir:

o - operatör yetkisi verme/alma;
p - özel kanal;
s - gizli kanal;
i - davetsel moddaki kanal;
t - sadece operatörlerin başlık değiştirebildiği kanal;
n - kanalda bulunmayanların mesaj gönderemediği kanal;
m - sadece operatörlerin konuşabildiği kanal;
l - kanala limit koyma/limit konmuş kanal;
b - bir mask'i ban'lama/ban'ı kaldırma;
v - +m moddaki kanalda bir kullanıcıya konuşma izni (voice) verme/alma;
k - kanala şifre koyma/kaldırma/şifre konmuş kanal.

'o' ve 'b' seçenekleri kullanılırken, her komutta toplamda 3 mode kullanılabilir. Yani en fazla 3 adet olmak üzere 'o' ve 'b' kombinasyonları yapılabilir.

*** 4.2.3.2 Nick modları

Nick modları kullanıcının diğer kullanıcılar tarafından nasıl göründüğü ya da kullanıcıya extra olarak hangi mesajların gönderildiği gibi durumlarda değişiklik yaratır. Bir nick MODE komutu sadece komutu gönderen kişinin nicki komutta parametre olarak belirtilen nick ile aynı ise işlem görür.

Çeşitli nick modları aşağıdaki gibidir:

i - görünmez kullanıcı modu;
s - sunucu mesajlarını alabilen kullanıcı modu;
w - wallops mesajlarını alabilen kullanıcı modu;
o - operatör flag'i.

Ek modlar daha sonra kullanılır olacaktır.

Eğer bir kullanıcı kendisine +o modu vererek operatör statüsüne geçmeye çalışırsa, komut ignore edilecektir. Ancak kendini deop etmesi (-o kullanarak) mümkündür. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
RPL_CHANNELMODEIS --> (Kanal modları hakkında bilgi)
ERR_CHANOPRIVSNEEDED --> (Kanal operatörü değilsiniz)
ERR_NOSUCHNICK --> (Böyle bir nick bulunmuyor)
ERR_NOTONCHANNEL --> (Kanalda değilsiniz)
ERR_KEYSET --> (Kanalda zaten bir şifre var)
RPL_BANLIST --> (Ban listesi)
RPL_ENDOFBANLIST --> (Ban listesinin sonu)
ERR_UNKNOWNMODE --> (Bilinmeyen mode)
ERR_NOSUCHCHANNEL --> (Böyle bir kanal bulunmuyor)
ERR_USERSDONTMATCH --> (Nick uyuşmazlığı)
RPL_UMODEIS --> (Nick modları hakkında bilgi(own))
ERR_UMODEUNKNOWNFLAG --> (Bilinmeyen nick modu)

Örnekler:

Kanal modlarının kullanımı:

MODE #helpethos +im --> ; #helpethos kanalında sadece operatörler konuşabilir ve kanal davetsel moda alınır.
MODE #helpethos +o Ekin --> ; #helpethos kanalında Ekin nickine kanal operatörlüğü verilir.
MODE #helpethos +v Ekin --> ; #helpethos kanalında Ekin nickine konuşma izni (voice) verilir.
MODE #helpethos -s --> ; #helpethos kanalı gizli moddan çıkartılır.
MODe #helpethos +k helpkültür --> ; #helpethos kanalına ''helpkültür'' şifresi konulur.
MODE #helpethos +l 10 --> ; #helpethos kanalına 10 kişilik limit konur.
MODE &helpethos +b --> ; &helpethos kanalındaki banlar listelenir.
MODE &helpethos +b *!*@* --> ; Bütün kullanıcıların kanala girişi engellenir.
MODE &helpethos *!*@*.net --> ; *.net host'unu taşıyan bütün kullanıcıların kanala girmesi engellenir.

Nick modlarının kullanımı:

MODE Scheat -w --> ; Scheat nicki artık wallops mesajlarını almayacaktır.
:Scheat MODE Scheat +i --> ; Scheat nickinin +i modu almak için gönderdiği mesaj.
MODE Ekin -o --> ; Ekin operatör durumundan çıkış yapıyor. Komutun (''MODE Ekin +o'') şeklinde kullanımına izin verilmemelidir çünkü bu durum OPER komutunun yetkilerini aşar.

** 4.2.4 Topic mesajı

Komut: TOPIC
Parametreler: <kanal> [<başlık>]

TOPIC mesajı bir kanalın başlığını değiştirmek ya da görmek için kullanılır. Eğer <başlık> parametresi kullanılmazsa kanalın başlığı görülür, kullanılırsa başlık değiştirilir (kanal modları değiştirilmesine izin veriyor ise). Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_NOTONCHANNEL --> (Kanalda değilsiniz)
RPL_NOTOPIC --> (Kanalda başlık yoktur)
RPL_TOPIC --> (Başlık mesajı verilir)
ERR_CHANOPRIVSNEEDED --> (Kanal operatörü değilsiniz)

Örnekler:

:Scheat TOPIC #helpethos Hoşgeldiniz. --> ; Scheat kullanıcısı #helpethos kanalına ''Hoşgeldiniz.'' başlığı koyuyor.
TOPIC #helpethos IRC.HelpEthos.Net --> ; #helpethos kanalına başlık konur.
TOPIC #helpethos --> ; #helpethos kanalının başlığı görülür.

** 4.2.5 Names mesajı

Komut: NAMES
Parametreler: [<kanal>{,<kanal>}]

NAMES komutunu kullanarak, kullanıcı görebildiği herhangi bir kanaldaki kendisine görünür olan tüm kullanıcıları listeleyebilir. Görülebilen kanal isimleri özel olmayan (+p) ya da gizli olmayan (+s) kanallar ya da içinde bulundukları kanallardır. <kanal> parametresi eğer geçerli ise bilgi dönüşü sağlayacak kanalları temsil eder. Geçersiz kanal isimleri için herhangi bir hata cevabı yoktur.

Eğer bir <kanal> parametresi verilmezse, tüm kanalların bir listesi ve kanalda bulunanların listesi alınır. Bu listenin sonunda hiçbir kanalda bulunmayan ya da görünür bir kanalda bulunmayan kullanıcılar *"* kanalında olarak görülürler. Numerik cevaplar:

RPL_NAMREPLY --> (Names listesi)
RPL_ENDOFNAMES --> (Names listesi sonu)

Örnekler:

NAMES #helpethos,#helpquery --> ; #helpethos ve #helpquery kanalları eğer bize görünür durumda ise, kanallardaki görünür kullanıcıları listeler.
NAMES --> ; Görünür tüm kanal ve kullanıcıları listeler.

** 4.2.6 List mesajı

Komut: LIST
Parametreler: [<kanal>{,<kanal>} [<sunucu>]]

List mesajı kanalları ve başlıklarını listelemek için kullanılır. Eğer <kanal> parametresi kullanılırsa sadece o kanal listelenir. Eğer komutu kullanan kullanıcı o kanallarda değilse, özel kanallar (başlıkları olmaksızın) "Prv" şeklinde gösterilirler. Benzer olarak, aynı durumda gizli kanallar hiç listelenmezler. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_LISTSTART --> (Liste başlangıcı)
RPL_LIST --> (List cevabı)
RPL_LISTEND --> (Liste sonu)

Örnekler:

LIST --> ; Tüm kanalları listeler.
LIST #helpethos,#helpquery --> ; #helpethos ve #helpquery kanallarını listeler.

** 4.2.7 Invite mesajı

Komut: INVITE
Parametreler: <nick> <kanal>

INVITE mesajı kullanıcıları kanala davet etmek için kullanılır. <nick> parametresi hedef kanala (<kanal>) davet edilecek kullanıcının nickidir. Kullanıcının davet edileceği kanalın geçerli bir kanal olması veya var olması gibi bir zorunluluk yoktur. Kullanıcıyı davetsel modda (+i) bir kanala davet etmek için, davet edecek olan kullanıcının kanal operatörü olması gerekir. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_NOSUCHNICK --> (Böyle bir nick bulunmuyor)
ERR_NOTONCHANNEL --> (Kanalda değilsiniz)
ERR_USERONCHANNEL --> (Kullanıcı kanalda)
ERR_CHANOPRIVSNEEDED --> (Kanal operatörü değilsiniz)
RPL_INVITING --> (Kullanıcı başarıyla davet ediliyor)
RPL_AWAY --> (Kullanıcı meşgul durumda)

Örnekler:

:Ekin INVITE Scheat #helpethos --> ; Ekin kullanıcısı Scheat kullanıcısını #helpethos kanalına davet ediyor.
INVITE Ekin #helpethos --> ; Ekin nickini #helpethos kanalına davet etmek için kullanılan komut.

** 4.2.8 Kick komutu

Komut: KICK
Parametreler: <kanal> <kullanıcı> [<sebep>]

KICK komutu bir kullanıcı kanaldan zorla çıkarmak için kullanılır. KICK komutu kullanıcıyı kanaldan ''atar'' (zorunlu PART). Sadece kanal operatörleri kullanıcılara KICK atabilir. KICK komutunun hedefi olan kullanıcı kanaldan atılmadan önce, her sunucu komutu kullanan kişinin kanal operatörü olup olmadığını kontrol eden bir KICK mesajı alır. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_NOSUCHCHANNEL --> (Böyle bir kanal bulunmuyor)
ERR_BADCHANMASK --> (Kanal ismi yanlış girildi)
ERR_CHANOPRIVSNEEDED --> (Kanal operatörü değilsiniz)
ERR_NOTONCHANNEL --> (Kanalda değilsiniz)

Örnekler:

KICK &helpethos Scheat --> ; Scheat &helpethos kanalından atılır.
KICK #helpethos Ekin :Kötü nick --> ; Ekin #helpethos kanalından kötü nick olduğu gerekçesi ile atılır.
:Ekin KICK #helpethos Scheat --> ; Ekin nickinin Scheat nickine #helpethos kanalında uyguladığı KICK komutu mesajı.

Not:

KICK komutunun parametrelerini aşağıdaki şekilde genişletmek mümkündür:

<kanal>{,<kanal>} <kullanıcı>{,<kullanıcı>} [<sebep>]

* 4.3 Sunucu Sorgu ve Komutları

Sunucu sorgu komutları ağa bağlı olan herhangi bir sunucu ile ilgili bilgi almak için oluşturulmuştur. Ağa bağlı olan tüm sunucular bu komutlara doğru biçimde cevap vermek zorundadır. Geçersiz bir cevap ya da cevabın yokluğu ilgili sunucuda sorun olduğu şeklinde algılanır ve sorun mümkün olan en kısa zamanda çözülene kadar o sunucunun bağlantısı koparılır/engellenir.

Bu sorgularda parametre <sunucu> olarak görülür, ama bu bir nick, sunucu ya da wildcard kullanılmış bir mask de olabilir. Ancak her parametre için sadece bir adet sorgu ve cevap oluşturulur.

** 4.3.1 Version mesajı

Komut: VERSION
Parametreler: [<sunucu>]

VERSION mesajı sunucunun program versiyonunu sorgulamak için kullanılır. Opsiyonel olarak kullanılan <sunucu> parametresi, kullanıcının direkt olarak bağlı olmadığı bir sunucunun versiyonunu sorgulamasına olanak sağlar. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_VERSION --> (Versiyon verileri)

Örnekler:

:Ekin VERSION *.HelpEthos.Net --> ; Ekin nickinin ağdaki *.HelpEthos.Net uzantısı ile biten bir sunucunun versiyonunu sorgulama mesajı.
VERSION HelpEthos.Net --> ; HelpEthos.Net sunucusunun versiyonunu sorgulamak için kullanılan komut.

** 4.3.2 Stats mesajı

Komut: STATS
Parametreler: [<sorgu> [<sunucu>]]

Stats mesajı bir sunucunun istatistiklerini sorgulamak için kullanılır. Eğer <sunucu> parametresi kullanılmazsa, sadece "end of stats" cevabı geri gönderilir. Bu komutun kullanımı cevabı veren sunucu ile yüksek derecede bağlantılıdır, ancak sunucu aşağıda belirtilen sorgular ya da benzeri sorgulara cevap verebilmelidir.

(Eğer <sunucu> parametresi kullanılmışsa) Hedef sunucu üzerinde herhangi tek bir harf belirtilerek sorgu yapılabilir, aksi takdirde aracı sunucular tarafından değiştirilmeden ve dikkate alınmadan aktarılır. Aşağıdaki sorgular güncel IRC kullanımında mevcuttur ve sunucunun kurulum bilgilerinin birçoğunu verirler. Farklı versiyonlar tarafından aynı şekilde desteklenmiyor olabilse de, tüm sunucuların güncel olarak kullanılan cevap formatlarına ve sorgu amacına uygun olan her STATS sorgusuna geçerli bir cevap verebilmesi gerekir.

Güncel olarak desteklenen sorgular aşağıdaki gibidir:

c - Sunucunun bağlanabileceği ya da kendisine bağlanmasına izin verdiği sunucuların listesini verir.

h - Leaf olarak muamele görmeye zorlanan ya da hub olarak işlev görmesine izin verilen sunucuların listesini verir.

i - Sunucunun bir kullanıcının sunucuya bağlanmak için sahip olması gereken izin verilmiş host'ların listesini verir.

k - Sunucudaki yasaklanmış kullanıcı ismi/host ismi kombinasyonlarının listesini verir.

l - Sunucunun bağlantılarının bağlantı sürelerini ve aktarılan veri miktarlarını da içeren bir listesini verir.

m - Sunucu tarafından desteklenen komutların ve bu komutların kaçar defa kullanıldığının bir listesini verir. (kullanım miktari 0 olanlar gösterilmez.)

o - Normal kullanıcıların operatör erişimi alabileceği host'ların listesini verir. (Eklenmiş olan oper hesapları ve flag'leri listelenir.)

y - Y-lines (sınıf) sunucu konfigürasyon dosyalarının sınıfsal özelliklerinin listesini verir.

u- Sunucunun aktif olduğu süreyi verir.

Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_STATSCLINE --> (c sorgusu cevabı)
RPL_STATSNLINE --> (n sorgusu cevabı)
RPL_STATSILINE --> (i sorgusu cevabı)
RPL_STATSKLINE --> (k sorgusu cevabı)
RPL_STATSQLINE --> (q sorgusu cevabı)
RPL_STATSLLINE --> (l sorgusu cevabı)
RPL_STATSLINKINFO -->
RPL_STATSUPTIME
RPL_STATSCOMMANDS
RPL_STATSOLINE --> (o sorgusu cevabı)
RPL_STATSHLINE --> (h sorgusu cevabı)
RPL_ENDOFSTATS --> (Stats komutu cevabı sonu)

Örnekler:

STATS m --> ; Bağlı bulunan sunucudaki komut kullanım istatistiği listelenir.
:Ekin STATS c HelpEthos.Net --> ; Ekin kullanıcısının HelpEthos.Net sunucusunun C/N line bilgisini görmek için yaptığı STATS sorgusu.

** 4.3.3 Links mesajı

Komut: LINKS
Parametreler: [[<uzak sunucu>] <sunucu mask'i>]

LINKS ile kullanıcı sorguya cevap veren sunucuların tanıdığı tüm sunucuların bir listesini alır. Eğer mask kullanılmışsa listelenen sunucular mask ile uyuşuyor olmalıdır, kullanılmıyorsa listenin tamamı verilir.

Eğer <uzak sunucu>'ya ek olarak bir <sunucu mask'i> verilmişse, LINKS komutu mask'e uyan (eğer varsa) ilk sunucuya gönderilir ve o sunucunun sorguya cevap vermesi istenir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_LINKS --> (Links mesajı cevabı)
RPL_ENDOFLINKS --> (Links mesajı sonu)

Örnekler:

LINKS *.HelpEthos.Net --> ; *.HelpEthos.Net mask'ine uyan tüm sunucular listelenir.
:Ekin LINKS *.HelpEthos.Net --> ; Ekin kullanıcısının *.HelpEthos.Net mask'ine uyan tüm sunucuları listelemek için kullandığı LINKS sorgusu.

** 4.3.4 Time mesajı

Komut: TIME
Parametreler: [<sunucu>]

Time mesajı, belirlenmiş sunucunun lokal zamanını sorgulamak için kullanılır. Eğer sunucu parametresi kullanılmazsa, komutun uygulandığı sunucu sorguya cevap verir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_TIME --> (Time mesajı cevabı)

Örnekler:

TIME HelpEthos.Net --> ; HelpEthos.Net sunucusunda zaman sorgusu yapılır.
Ekin TIME *.HelpEthos.Net --> ; Ekin kullanıcısının *.HelpEthos.Net mask'ine uyan sunucular için yaptığı TIME sorgusu.

** 4.3.5 Connect mesajı

Komut: CONNECT
Parametreler: <hedef sunucu> [<port> [<uzak sunucu>]]

CONNECT komutu bir sunucuyu başka bir sunucu ile bağlantı kurmaya zorlamak için kullanılabilir. CONNECT kısıtlanmış bir komuttur ve sadece IRC operatörler tarafından kullanılabilir. Eğer bir uzak sunucu belirtilmişse, CONNECT teşebbüsü o sunucu tarafından <hedef sunucu> ve <port> için gerçekleştirilir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
ERR_NOPRIVILEGES --> (Bu komutu kullanma yetkiniz yok)
ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)

Örnekler:

CONNECT IRC.HelpEthos.Net --> ; IRC.HelpEthos.Net sunucusuna bağlanmak için kullanılan komut.
:Ekin CONNECT HelpEthos.Net 6668 TRSohbet.Com --> ; HelpEthos.Net sunucusunun TRSohbet.Com sunucusuna 6668 portundan bağlanması için Ekin kullanıcısı tarafından kullanılan komut.

** 4.3.6 Trace mesajı

Komut: TRACE
Parametreler: [<sunucu>]

TRACE komutu belirli bir sunucu için güzergah bulmak için kullanılır. Bu mesajı üreten her sunucu, komutu gönderene bunun bir geçiş link'i olduğu bilgisini işaret eden bir cevap göndermek zorundadır, bu cevaplar "traceroute" kullanımı sonucu alınmış bir cevap zincirini oluşturur. Bu cevap gönderildikten sonra, sunucu mesajı diğer sunucuya ulaştığı kesinleşene kadar takip eder. Eğer <sunucu> parametresi kullanılmamışsa, TRACE komutunun kullanıcıya mevcut sunucunun hangi sunucular ile direkt bağlantısı olduğunu söyleyen bir cevap göndermesi önerilir.

Eğer <sunucu> parametresi ile belirlenmiş hedef gerçek bir sunucu ise, hedef sunucunun tüm sunucuları ve onlara bağlı olan kullanıcıları vermesi beklenir, ancak sadece operatörler kullanıcıları görebilir. Eğer parametre bir nick ise sadece o nick için cevap verilir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)

Eğer TRACE mesajı başka bir sunucu için kullanılmışsa, aradaki bütün sunucular komutun içinden geçtiğini ve gideceği bir sonraki hedefi belirten bir RPL_TRACELINK cevabı vermelidir.

RPL_TRACELINK

Bir TRACE cevabı aşağıdaki numerik cevapların herhangi birinden ya da birden fazlasından oluşabilir:

RPL_TRACECONNECTING
RPL_TRACEHANDSHAKE
RPL_TRACEUNKNOWN
RPL_TRACEOPERATOR
RPL_TRACEUSER
RPL_TRACESERVER
RPL_TRACESERVICE
RPL_TRACENEWTYPE
RPL_TRACECLASS

Örnekler:

TRACE *.HelpEthos.Net --> ; *.HelpEthos.Net mask'ine uyan sunucular için uygulanan TRACE.
:Ekin TRACE Scheat --> ; Ekin kullanıcısı tarafından Scheat kullanıcısına uygulanan TRACE.

** 4.3.7 Admin komutu

Komut: ADMIN
Parametreler: [<sunucu>]

Admin mesajı belirtilen sunucunun admininin ismini öğrenmek için kullanılır. Eğer <sunucu> parametresi kullanılmazsa, komut bulunulan sunucu için geçerli olur. Her sunucunun ADMIN mesajlarını diğer sunuculara gönderebilmesi gerekir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_ADMINME --> (Admin komutu cevabı başlangıcı)
RPL_ADMINLOC1 --> (Sunucunun ülke, eyalet, şehir bilgi cevabı)
RPL_ADMINLOC2 --> (Sunucunun üniversite bilgi cevabı)
RPL_ADMINEMAIL --> (Sunucunun email bilgi cevabı)

Örnekler:

ADMIN IRC.HelpEthos.Net --> ; IRC.HelpEthos.Net sunucusu için yapılan ADMIN sorgusu.
:Ekin ADMIN *.HelpEthos.Net --> ; Ekin kullanıcının *.HelpEthos.Net mask'ine uyan sunucular için yaptığı ADMIN sorgusu.

** 4.3.8 Info komutu

Komut: INFO
Parametreler: [<sunucu>]

INFO komutunun, sunucunun ne zaman düzenlendiği, versiyonu, yama seviyesi, ne zaman başlatıldığı ve çeşitli diğer tanımlayıcı bilgileri vermesi beklenir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_INFO --> (Info komutu cevabı)
RPL_ENDOFINFO --> (Info komutu cevabı sonu)

Örnekler:

INFO IRC.HelpEthos.Net --> ; IRC.HelpEthos.Net sunucusunun bilgilerini almak için kullanılan komut.
:Ekin INFO *.HelpEthos.Net --> ; Ekin kullanıcısının *.HelpEthos.Net mask'ine uyan ilk sunucunun bilgilerini almak için gönderdiği INFO sorgusu.
INFO Ekin --> ; Ekin kullanıcısının bağlı olduğu sunucunun bilgilerini almak için kullanılan komut.

* 4.4 Mesaj Gönderme

IRC protokolünün ana amacı kullanıcılar için birbirleri ile iletişim kurabilecekleri bir platform sağlamaktır. PRIVMSG ve NOTICE bir kullanıcıdan diğerine mesaj iletimi gerçekleştirmek için mevcut tek yöntemlerdir, diğerleri sadece bunu mümkün kılar ve düzgün ve güvenilir biçimde çalışmasını garanti etmeyi dener.

** 4.4.1 Private mesajlar

Komut: PRIVMSG
Parametreler: <alıcı>{,<alıcı>} <gönderilecek metin>

PRIVMSG komutu kullanıcılar arasında özel mesaj göndermek için kullanılır. <alıcı> mesajın gönderildiği kişinin nickidir. <alıcı> aynı zamanda birbirinden virgüllerle ayrılmış birden fazla nickten oluşan bir liste veya bir kanal olabilir.

<alıcı> parametresi aynı zamanda bir host mask (#mask) ya da sunucu mask'i ($mask) olabilir. Her iki durumda da sunucu mesajları o mask'e uyan sunucuda olan ya da o mask'e uyan host'a sahip olan kullanıcılara gönderecektir. Mask'te en az bir adet "." olmalıdır ve son "." karakterinden sonra hiçbir wildcard kullanılmamalıdır. Bu kısıtlama kullanıcıların "#*" ya da "$*" mask'lerine mesaj göndermelerini engellemek için konmuştur çünkü tersi olursa mesaj tüm kullanıcılara gönderilecektir ve bu durum gerektiği gibi kullanılmamış ve istismar edilmiştir. Wildcardlar (joker karakterler) "?" ve "*" karakterleridir. PRIVMSG komutunun bu uzantısı sadece IRC operatörler tarafından kullanılabilir. Numerik cevaplar:

ERR_NORECIPIENT --> (Alıcı belirtilmedi)
ERR_NOTEXTTOSEND --> (Herhangi bir metin yok)
ERR_CANNOTSENDTOCHAN --> (Kanal gönderilmedi/yetki yok)
ERR_NOTOPLEVEL --> (Çok genel bir mask kullanıldı) (örn: *.eu yerine *)
ERR_WILDTOPLEVEL --> (Domain uzantısı yerine wildcard kullanıldı) (Sonda wildcard, örn: *.*)
ERR_TOOMANYTARGETS --> (Çok fazla hedef)
ERR_NOSUCHNICK --> (Böyle bir nick bulunmuyor)
RPL_AWAY --> (Kullanıcı meşgul durumda)

Örnekler:

:Ekin PRIVMSG Scheat :Merhaba --> ; Ekin'den Scheat'e gönderilen mesaj.
PRIVMSG Ekin :Nasılsın? --> ; Ekin'e mesaj gönderen komut.
PRIVMSG Ekin@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...].Net --> ; HelpEthos.Net sunucusunda bulunan Ekin nickine mesaj gönderen komut.
PRIVMSG $*.Net :Sunucu yeniden başlatılacak. --> ; *.Net mask'i ile eşleşen tüm sunucularda bulunan kullanıcılara gönderilen mesaj.
PRIVMSG #.*Net :İyi sohbetler dileriz. --> ; *.Net mask'i ile eşleşen bir host'tan bağlanan tüm kullanıcılara gönderilen mesaj.

** 4.4.2 Notice

Komut: NOTICE
Parametreler: <nick> <metin>

NOTICE mesajı PRIVMSG ile benzer olarak kullanılır. Aralarındaki fark, notice mesajlarına karşılık olarak asla otomatik cevap gönderilmemesidir. Bu kural sunucular için de geçerlidir, onlar da bir notice alındığında kullanıcıya hata mesajı göndermezler. Bu kuralın amacı alınan bir şeye karşılık olarak otomatik cevap gönderen bir istemci ile bir döngü oluşmasının engellenmesidir. Bu durum automaton (botlar) tarafından diğer bir bot ile herhangi bir döngüye düşmemek için sıkça kullanılır.

Cevaplar ile ilgili detaylı bilgi ve örnekler için PRIVMSG bölümüne bakınız.

* 4.5 Kullanıcı Tabanlı Sorgular

Kullanıcı sorguları bir kullanıcı ya da kullanıcı grubu ile ilgili ayrıntılı bilgi almak için kullanılan bir takım komutlardır. Bu komutlardan herhangi biri ile wildcard karakter kullanıldığında, eğer eşleşiyorlarsa, sadece bize görünür olan kullanıcıların bilgileri alınacaktır. Kullanıcıların görünürlüğü kullanıcı modları ile kullanıcıların bulunduğu ortak kanalların kombinasyonu ile belirlenir.

** 4.5.1 Who sorgusu

Komut: WHO
Parametreler: [<isim> [<o>]]

WHO mesajı bir kullanıcı tarafından <isim> parametresi ile eşleşen bir bilgi listesi almak için kullanılır. <isim> parametresinin kullanılmadığı durumlarda, tüm görünür (sorguyu gerçekleştiren kullanıcı ile ortak bir kanalı bulunmayan ve nick modları arasında +i bulunmayan) kullanıcılar listelenecektir. Aynı sonuç <isim> parametresi yerine ''0'' veya tüm kullanıcıları kapsayacak bir wildcard kullanılarak da alınır.

<isim> parametresi eğer kanal ismi bulunamazsa kullanıcının nicki, host'u, identd'i, sunucusu ya da realname'i ile eşleştirilebilir.

Eğer ''o'' parametresi kullanılırsa, sadece mask ile eşleşen operatörler listelenir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_WHOREPLY --> (Who sorgusu cevabı)
RPL_ENDOFWHO --> (Who sorgusu cevabı sonu)

Örnekler:

WHO *.he --> ; "*.he" mask'i ile eşleşen tüm kullanıcıları listeler.
WHO Ekin* o --> ; "Ekin*" mask'i ile eşleşen tüm operatörleri listeler.

** 4.5.2 Whois sorgusu

Komut: WHOIS
Parametreler: [<sunucu>] <nickmask>[,<nickmask>[,...]]

WHOIS mesajı belirli bir kullanıcı ile ilgili bilgi almak için kullanılır. Sunucu bu sorguyu sorgudaki nickmask'ler ile eşleşen kullanıcılar ile ilgili farklı durumları açıklayan birkaç numerik mesaj ile (eğer görme yetkiniz varsa) cevaplayacaktır. Eğer <nickmask>'te herhangi bir wildcard kullanılmamışsa, o nick ile ilgili görmeye yetkimiz olan her şey listelenecektir. Virgül ile ayrılmak kaydıyla birden fazla nick kullanılabilir.

<sunucu> parametresi ile kullanımı sorguyu belirtilen sunucu için gönderir. Bu tür sorgular kullanıcının idle (konuşmadığı süre) süresini öğrenmek için yararlıdır, çünkü bu bilgi sadece sorgulanan kullanıcının bulunduğu sunucu tarafından bilinen bir bilgidir. Diğer her şey ağ genelince bilinir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
ERR_NONICKNAMEGIVEN --> (Herhangi bir nick belirlenmedi)
RPL_WHOISUSER --> (Whois sorgusu kullanıcı verisi cevabı)
RPL_WHOISCHANNELS --> (Whois sorgusu kanal verisi cevabı)
RPL_WHOISCHANNELS --> (Whois sorgusu kanal verisi cevabı)
RPL_WHOISSERVER --> (Whois sorgusu sunucu verisi cevabı)
RPL_AWAY --> (Kullanıcı meşgul durumda)
RPL_WHOISOPERATOR --> (Whois sorgusu ircoperatör verisi cevabı)
RPL_WHOISIDLE --> (Whois sorgusu idle süresi cevabı)
ERR_NOSUCHNICK --> (Böyle bir nick bulunmuyor)
RPL_ENDOFWHOIS --> (Whois sorgusu cevabı sonu)

Örnekler:

WHOIS Ekin --> ; Ekin kullanıcısı hakkındaki bilgileri verir.
WHOIS HelpEthos.Net Ekin --> ; Ekin kullanıcısı hakkındaki bilgiler direkt olarak HelpEthos.Net sunucusundan istenir.

** 4.5.3 Whowas

Komut: WHOWAS
Parametreler: <nick> [<sayı> [<sunucu>]]

Whowas sunucuda olmayan bir nick ile ilgili bilgi almak için kullanılır. Nick değişikliklerinde de bu sorgu kullanılabilir. Bu sorguya cevap olarak sunucu nick hafızasını tarar ve sorguda belirtilen nick ile ilgili bilgi arar (wildcard kullanılmaz). Listelenen bilgiler en yeniden eskiye doğru listelenir. Eğer birden fazla girdi varsa, <sayı> parametresinde belirtilen kadarı ya da parametre kullanılmamışsa hepsi listelenir. Eğer parametre olarak negatif (-x) bir sayı verilirse, yine tam liste alınır. Numerik cevaplar:

ERR_NONICKNAMEGIVEN --> (Herhangi bir nick belirlenmedi)
ERR_WASNOSUCHNICK --> (Nick ile ilgili kayıt yok)
RPL_WHOWASUSER --> (Kullanıcı için whowas cevabı)
RPL_WHOISSERVER --> (Sunucu için whowas cevabı)
RPL_ENDOFWHOWAS --> (Whowas cevabı sonu)

Örnekler:

WHOWAS Ekin --> ; Ekin nicki ile ilgili tüm girdileri listeler.
WHOWAS Scheat 9 --> ; Scheat nicki ile ilgili son 9 girdiyi listeler.
WHOWAS Fromhell 1 *.Net --> ; *.Net mask'i ile eşleşen ilk sunucudan Fromhell ile ilgili en yeni girdi alınır.

* 4.6 Çeşitli Mesajlar

Bu kategorideki mesajlar yukarıdaki herhangi bir kategoriye dahil değildir ancak yine de protokolün gerekli parçalarındandır.

** 4.6.1 Kill mesajı

Komut: KILL
Parametreler: <nick> <sebep>

KILL mesajı bir kullanıcının bağlantısının bağlı bulunduğu sunucu tarafından kesilmesi için kullanılır. KILL sunucular tarafından aynı nick ile birden fazla giriş olduğunda her iki bağlantıyı da kesmek için kullanılır, aynı zamanda operatör kullanımına da açıktır.

Otomatik olarak yeniden bağlanma özelliği kullanan kullanıcılar için KILL pek etkili değildir çünkü bağlantı sadece kısa bir süre için kopmuş olur. Yine de KILL veri alışverişini keser ve çok fazla bilgi gönderilmesini engeller. Her kullanıcı kill mesajlarını görebilir böylece sorun oluşturabilecek davranışlardan kaçınmayı öğrenebilirler.

Nicklerin ağ üzerinde tek olması gerekir, bu yüzden ikilik tespit edilen herhangi bir durumda (örneğin aynı nick ile bağlantı kurmaya çalışan iki kullanıcı olması durumu) her iki bağlantı da kesilir ve sadece bir tanesi o nick ile geri gelebilir.

Sebep kısmında KILL'in gerçek sebebi belirtilmelidir. Sunucu tarafından uygulanan KILL komutlarının sebep kısmında genellikle çakışan nicklerin köken bilgileri verilir. Operatörler ise herhangi bir sebep belirtmekte özgürdürler. KILL atan kullanıcıların kimliklerinin gizlenmesini ve komutun kötüye kullanılmasını engellemek amacıyla sebep kısmında ayrıca komutun kim tarafından kullanıldığı da belirtilir. Numerik cevaplar:

ERR_NOPRIVILEGES --> (Bu komutu kullanma yetkiniz yok)
ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_NOSUCHNICK --> (Böyle bir nick bulunmuyor)
ERR_CANTKILLSERVER --> (Sunucuya kill atılamaz)

Örnek:

KILL Ekin ( HelpEthos.Net <- TRSohbet.Com) --> ; HelpEthos.Net ve TRSohbet.Com sunucuları arasındaki nick çatışmasına bağlı kill mesajı.

NOT:

Sadece operatörlerin diğer kullanıcıları KILL mesajı ile uzaklaştırabilmeleri önerilir. İdeal bir ortamda operatörlerin bile bunu kullanmaya ihtiyaçları olmayacak ve KILL mesajları sadece sunucular tarafından yaratılacaktır.

** 4.6.2 Ping mesajı

Komut: PING
Parametreler: <sunucu1> [<sunucu2>]

PING mesajı bağlantının diğer ucundaki bir kullanıcının varlığını kontrol etmek için kullanılır. Eğer bir bağlantıdan herhangi bir eylem alınmıyorsa, belli aralıklarla PING mesajı gönderilir. Eğer bağlantı PING mesajına belirlenen zaman içinde cevap vermezse, bağlantı sonlandırılır.

PING mesajı alan her kullanıcı <sunucu1>'e (PING mesajını gönderen sunucu) mümkün olan en kısa sürede PONG cevabı göndererek hala orada olduğunu bildirmelidir. Sunucular PING mesajlarına cevap vermemelidir ancak bağlantının aktif olduğunu tespit edebilmek için PING mesajlarına ihtiyaç duyarlar. Eğer <sunucu2> parametresi kullanılırsa PING mesajı o sunucuya aktarılır. Numerik cevaplar:

ERR_NOORIGIN --> (Eksik parametre)
ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)

Örnekler:

PING HelpEthos.Net --> ; Sunucu HelpEthos.Net sunucusuna bağlantılarının hala aktif olduğunu belirtmek üzere PING gönderiyor.
PING Fromhell --> ; Fromhell nickine gönderilen PING mesajı.

** 4.6.3 Pong mesajı

Komut: PONG
Parametreler: <daemon> [<daemon2>]

PONG mesajı PING mesajına verilen cevaptır. Eğer <daemon2> parametresi kullanılırsa mesaj oraya aktarılır. <daemon> parametresi PING mesajına cevap veren ve bu mesajı yaratan daemon'a aktarılır. Numerik cevaplar:

ERR_NOORIGIN --> (Eksik parametre)
ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)

Örnek:

PONG HelpEthos.Net TRSohbet.Com --> ; HelpEthos.Net sunucusundan TRSohbet.Com sunucusuna gönderilen PONG cevabı.

** 4.6.4 Error

Komut: ERROR
Parametreler: <hata mesajı>

ERROR komutu sunucular tarafından ciddi ya da ölümcül bir hatayı operatörlere bildirmek için kullanılır. Ayrıca sunucudan sunucuya da gönderilebilir ancak herhangi bir normal bilinmeyen istemciden geliyorsa kabul edilmez.

Bir ERROR mesajı sunucu-sunucu link'i ile oluşan hataları bildirmek için kullanılır. Mesaj bir sunucu tarafından bağlantının diğer ucundaki sunucuya gönderilir, o sunucu da operatörlerine iletir. Eğer mesaj bir sunucudan alınmışsa, diğer sunuculara gönderilmez.

Bir sunucu aldığı ERROR mesajını operatörlerine ilettiğinde mesaj NOTICE olarak gönderilir, bu şekilde istemcinin hatadan sorumlu olmadığı anlaşılır. Numerik yoktur.

Örnekler:

ERROR :Server *.Net already exists --> ; Hataya sebep olan sunucuya gönderilen ERROR mesajı.
NOTICE Ekin :ERROR from HelpEthos.Net -- Server *.Net already exists --> ; Yukarıdaki mesajın diğer sunucudaki Ekin nickine gönderimi.


5. OPSİYONEL

Bu bölümde OPSİYONEL mesajlar anlatılacaktır. Protokolün işleyişi için şart değildirler. Seçeneğin yokluğunda, bir hata cevabı ya da bilinmeyen komut hata mesajı yaratılır. Eğer mesaj başka bir sunucu için yaratıldıysa o sunucuya aktarılır. Bunun için ayrılmış olan numerikler aşağıda açıklanmıştır.

* 5.1 Away

Komut: AWAY
Parametreler: [mesaj]

AWAY mesajı ile kullanıcılar direkt olarak kendilerine gönderilen PRIVMSG komutlarına cevap olacak otomatik bir mesaj belirlerler. Otomatik cevap PRIVMSG komutunu kullanan kullanıcının bulunduğu sunucu tarafından gönderilir. Cevap veren tek sunucu komutu kullanan kullanıcının bağlı olduğu sunucudur.

AWAY mesajı parametre ile (meşgul mesajı belirlenir) ya da parametresiz (meşgul durumundan çıkılır) olarak kullanılabilir. Numerik cevaplar:

RPL_UNAWAY --> (Artık meşgul değilsiniz)
RPL_NOWAWAY --> (Meşgul oldunuz)

Örnekler:

AWAY
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
ir süre yokum. --> ; ''Bir süre yokum.'' mesajı ile meşgul olundu.
:Ekin AWAY --> ; Ekin meşgul durumundan çıktı.

* 5.2 Rehash Mesajı

Komut: REHASH
Parametreler: Yok

Rehash mesajı operatörler tarafından sunucunun konfigürasyon dosyasını yeniden okuması ve işleme koyması için kullanılır. Numerik cevaplar:

RPL_REHASHING --> (Rehash komutu başarılı)
ERR_NOPRIVILEGES --> (Bu komutu kullanma yetkiniz yok)

Örnekler:

REHASH --> ; Operatör yetkisine sahip bir kullanıcıdan sunucuya konfigürasyon dosyasını tekrar okuması için gönderilen mesaj.

* 5.3 Restart Mesajı

Komut: RESTART
Parametreler: Yok

Restart mesajı operatörler tarafından sunucunun yeniden başlatılması için kullanılır. Bu mesaj opsiyoneldir çünkü gelişigüzel kullanıcıların sunucuya operatör olarak bağlanması ve bu komutu uygulayarak serviste en azından bir kesinti yaratması açısından bir risk olarak görülebilir.

RESTART komutu her zaman komutu kullanan kullanıcının bağlı olduğu sunucu tarafından işleme alınmalı ve bağlı bulunan diğer sunuculara aktarılmamalıdır. Numerik cevaplar:

ERR_NOPRIVILEGES --> (Bu komutu kullanma yetkiniz yok)

Örnekler:

RESTART --> ; Parametre gerekmez.

* 5.4 Summon Mesajı

Komut: SUMMON
Parametreler: <kullanıcı> [<sunucu>]

SUMMON komutu bir IRC sunucusunun çalışır olduğu bir host'ta bulunan kullanıcılara IRC'ye katılmalarını isteyen bir mesaj göndermek için kullanılır. Bu mesaj sadece hedef sunucuda (a) SUMMON aktif ise, (b) kullanıcı oturum açmış ise ve (c) sunucu kullanıcının bağlı olduğu makineye müdahale edebiliyorsa gönderilir.

Eğer <sunucu> parametresi kullanılmazsa, sunucu kullanıcıyı bağlı bulunduğu sunucudan çağırır, o sunucuyu hedef olarak alır.

Eğer bir sunucuda summon aktif değilse, ERR_SUMMONDISABLED numeriği gönderilir ve summon mesajı ileri aktarılır. Numerik cevaplar:

ERR_NORECIPIENT --> (Alıcı belirtilmedi)
ERR_FILEERROR --> (Komutun işlenmesi sırasında, dosya işlemi başarısız oldu)
ERR_NOLOGIN --> (Kullanıcı online değil)
ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_SUMMONING --> (Kullanıcı çağırıldı)

Örnekler:

SUMMON Ekin --> ; Ekin kullanıcısı sunucunun host'undan çağırılır.
SUMMON Ekin HelpEthos.Net --> ; Ekin kullanıcısı HelpEthos.Net ismindeki sunucunun çalışıyor olduğu host'tan çağırılır.

* 5.5 Users

Komut: USERS
Parametreler: [<sunucu>]

USERS komutu who(1), rusers(1) ve finger(1) benzeri bir formatla, sunucuya oturum açmış olan tüm kullanıcıları listelemek için kullanılır. Güvenlik sebebi ile bazı sunucularda bu komut deaktif edilebilir. Eğer deaktif ise, bu durumu açıklamak üzere doğru numerik cevap sağlanmalıdır. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
ERR_FILEERROR --> (Komutun işlenmesi sırasında, dosya işlemi başarısız oldu)
RPL_USERSSTART --> (Users listesi başlangıcı)
RPL_USERS --> (USERS komutuna verilen cevaptır. [nick veya nick listesi])
RPL_NOUSERS --> (Online nick bulunmuyor)
RPL_ENDOFUSERS --> (Users liste sonu)
ERR_USERSDISABLED --> (Users komutu kullanılamıyor)

Deaktif olduğunda çıkacak cevap: ERR_USERSDISABLED

Örnekler:

USERS HelpEthos.Net --> ; HelpEthos.Net sunucusuna bağlı kullanıcıların listelenmesi isteği.
:Ekin USERS HelpEthos.Net --> ; Ekin kullanıcısının HelpEthos.Net sunucusuna bağlı kullanıcıların listelenmesi için uyguladığı komut.

* 5.6 Operwall Mesajı

Komut: WALLOPS
Parametreler: Tüm online operatörlere gönderilecek metin

Online durumdaki tüm operatörlere mesaj göndermek için kullanılır. WALLOPS'un bir kullanıcı komutu olarak düzenlenmesinden sonra komutun sıkça kötüye kullanıldığı ve birçok kişiye mesaj gönderme (WALL benzeri) amacıyla kullanıldığı tespit edilmiştir. Buna karşılık olarak WALLOPS kullanımının sadece sunucuların gönderen olarak tanınması şeklinde düzenlenmesi önerilmiştir. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)

Örnekler:

:HelpEthos.Net WALLOPS :Connect '*.TRSohbet.Com 6667' from Ekin --> ; HelpEthos.Net sunucusunun aldığı bir connect mesajını WALLOPS kullanarak iletmesi (komutu kullanan: Ekin).

* 5.7 Userhost Mesajı

Komut: USERHOST
Parametreler: <nick>{<boşluk><nick>}

USERHOST komutu boşluk karakteri ile ayrılmış en fazla 5 adet nick içeren bir liste vererek bu nickler ile ilgili bilgi almak için kullanılır. Dönüt bilgide de her cevap birbirinden boşluk karakteri ile ayrılmıştır. Numerik cevaplar:

RPL_USERHOST --> (Userhost komutuna verilen cevap)
ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)

Örnekler:

USERHOST Ekin Raven Strathmore --> ; Ekin, Raven ve Strathmore nickleri için USERHOST sorgusu.

* 5.8 Ison Mesajı

Komut: ISON
Parametreler: <nick>{<boşluk><nick>}

ISON komutu bir nickin sunucuda olup olmadığını anlamanın hızlı ve etkili bir yöntemini sağlamak adına oluşturulmuştur. ISON sadece bir parametre alır: bir ya da birden fazla (birbirinden boşluk karakteri ile ayrılmış) nick listesi. Bu listede belirtilen nicklerden online olan her bir nick için sunucu cevap satırına o nicki ekler. Yani bu liste boş da olabilir (eğer nicklerden hiçbiri online değilse), komuttaki listenin birebir aynısı da olabilir (eğer tüm nickler online ise) ya da online durumuna göre diğer herhangi bir nick listesi de olabilir. ISON komutunda tek seferde sorgulanabilecek nickler için net bir sayı yoktur, ancak nick listesindeki karakterler toplamı 512 karakteri geçmemelidir. Eğer geçerse sunucu 512 karaktere uydurabilmek için sondan bir kısmını kesebilir.

ISON komutu sadece komutu kullanan kullanıcının direkt olarak bağlı olduğu sunucu tarafından işlem görür ve diğer sunuculara aktarılmaz. Numerik cevaplar:

RPL_ISON --> (Ison komutuna verilen cevap)
ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)

Örnekler:

ISON Ekin Scheat PlaneT Ravenv Fromhell eLaa AmiR --> ; 7 nick için ISON örneği.


6. CEVAPLAR

Aşağıda yukarıda anlatılan komutlara verilen numerik cevapların bir listesi verilmiştir. Her numerik kendi adı, numarası ve cevap satırı ile verilmiştir.

* 6.1 Hata Cevapları

401 ERR_NOSUCHNICK
"<nick> :No such nick/channel"

- Bir komutta kullanılan nickin o anda sunucuda bulunmadığı anlamına gelir.

402 ERR_NOSUCHSERVER
"<sunucu ismi> :No such server"

- Verilen sunucu isminin mevcut olmadığı anlamına gelir.

403 ERR_NOSUCHCHANNEL
"<kanal ismi> :No such channel"

- Verilen kanal isminin geçerli olmadığı, öyle bir kanal bulunmadığı anlamına gelir.

404 ERR_CANNOTSENDTOCHAN
"<kanal ismi> :Cannot send to channel"

- (a) +n modundaki bir kanala kanal dışından mesaj göndermeye çalışan, (b) +m modundaki bir kanala herhangi bir prefix sahibi olmaksızın mesaj göndermeye çalışan kullanıcıya gönderilen hata mesajıdır.

405 ERR_TOOMANYCHANNELS
"<kanal ismi> :You have joined too many channels"

- Bulunabileceği maksimum kanal sayısını doldurmuş olduğu halde başka bir kanala girmeye çalışan kullanıcıya gönderilen hata mesajıdır.

406 ERR_WASNOSUCHNICK
"<nick> :There was no such nickname"

- WHOWAS sorgusunda kullanılmış olan bir nick ile ilgili hiçbir kayıt olmadığı anlamına gelir.

407 ERR_TOOMANYTARGETS
"<hedef> uplicate recipients. No message delivered."

- identd@host formatını kullanarak PRIVMSG/NOTICE göndermeye çalışan bir kullanıcıya aynı formatta birden fazla kişi bulunduğu zaman gönderilen hata mesajıdır.

409 ERR_NOORIGIN
":No origin specified"

- PING ya da PONG mesajının mesajı gönderen kişi ile ilgili parametresinin eksik olması durumunda kişiye gönderilen hata mesajıdır.

411 ERR_NORECIPIENT
":No recipient given (<komut>)"

- Kullanılan komutta herhangi bir alıcı belirtilmediği anlamına gelir.

412 ERR_NOTEXTTOSEND
":No text to send"

- Kullanılan komutta gönderilecek herhangi bir metin girilmediği anlamına gelir.

413 ERR_NOTOPLEVEL
"<mask> :No toplevel domain specified"

- Çok genel bir mask kullanıldığı anlamına gelir.

414 ERR_WILDTOPLEVEL
"<mask> :Wildcard in toplevel domain"

- 412 - 414 hataları PRIVMSG ile mesajın herhangi bir sebeple gönderilemediği anlamına gelir. ERR_NOTOPLEVEL ve ERR_WILDTOPLEVEL hataları da "PRIVMSG $<sunucu>" ya da "PRIVMSG #<host>" kullanımı yanlış şekilde uygulandığında verilir.

421 ERR_UNKNOWNCOMMAND
"<komut> :Unknown command"

- Sunucuya gönderilen komutun bilinmeyen bir komut olduğu/öyle bir komut olmadığı anlamına gelir.

422 ERR_NOMOTD
":MOTD File is missing"

- MOTD dosyasının sunucu tarafından açılamadığı anlamına gelir. / Kullanıcıya gönderilecek herhangi bir MOTD olmadığını belirtir.

423 ERR_NOADMININFO
"<sunucu> :No administrative info available"

- ADMIN mesajına karşılık olarak herhangi bir bilgi bulunmadığı anlamına gelir.

424 ERR_FILEERROR
":File error doing <file op> on <file>"

- Bir mesajın/komutun işlenmesi sırasında dosya hatası meydana geldiği anlamına gelir.

431 ERR_NONICKNAMEGIVEN
":No nickname given"

- Nick parametresi kullanılması gereken bir mesajda bu parametrenin eksik olması durumunda alınan hata mesajıdır.

432 ERR_ERRONEUSNICKNAME
"<nick> :Erroneus nickname"

- Bir NICK mesajı alındığında, kullanılmak istenen nick geçersiz bir karakter içerdiğinde ya da kullanımı yasak olduğunda alınan hata mesajıdır. (Bu numerik yanlış yazılmıştır, ancak tarihi sebeplerden dolayı isim bu şekilde kalmış ve değiştirilmemiştir. Doğrusu: erroneous)

433 ERR_NICKNAMEINUSE
"<nick> :Nickname is already in use"

- Bir nick değişikliği yapılması durumunda kullanıcının geçmek istediği nickin bir başkası tarafından kullanılmakta olduğu anlamına gelir.

436 ERR_NICKCOLLISION
"<nick> :Nickname collision KILL"

- Nick çatışması durumunda alınan hata mesajıdır.

441 ERR_USERNOTINCHANNEL
"<nick> <kanal> :They aren't on that channel"

- Komutta kullanılan hedef nickin, yine komutta belirtilen kanalda bulunmadığı anlamına gelir.

442 ERR_NOTONCHANNEL
"<kanal> :You're not on that channel"

- Bir kullanıcının içinde bulunmadığı bir kanalla ilgili, kanalda bulunmasını gerektirecek bir komut uyguladığında alınan hata mesajıdır.

443 ERR_USERONCHANNEL
"<kullanıcı> <kanal> :is already on channel"

- Bir kullanıcı zaten içinde bulunduğu bir kanala davet edildiğinde alınan hata mesajıdır. (Sajoin komutu ile de aynı hata alınır.)

444 ERR_NOLOGIN
"<kullanıcı> :User not logged in"

- Oturum açmamış bir kullanıcı için SUMMON komutu kullanıldığında alınan hata mesajıdır.

445 ERR_SUMMONDISABLED
":SUMMON has been disabled"

- SUMMON komutunun aktif olmadığı ya da eklentinin hiç kurulmadığı anlamına gelir.

446 ERR_USERSDISABLED
":USERS has been disabled"

- USERS komutunun aktif olmadığı ya da eklentinin hiç kurulmadığı anlamına gelir.

451 ERR_NOTREGISTERED
":You have not registered"

- Kullanıcının ayrıntılı biçimde analiz edilebilmesi için kayıtlı olması/giriş yapmış olması gerektiği anlamına gelir.

461 ERR_NEEDMOREPARAMS
"<komut> :Not enough parameters"

- Birçok komut sonrası alınabilecek bir hatadır. Yetersiz parametre kullanıldığı anlamına gelir.

462 ERR_ALREADYREGISTRED
":You may not reregister"

- Giriş yaptığı detayları değiştirmeye çalışan herhangi bir bağlantıya gönderilen hata mesajıdır. (İkinci USER mesajından alınan şifre ve kullanıcı detayları gibi)

463 ERR_NOPERMFORHOST
":Your host isn't among the privileged"

- Bağlantı kurulmasına izin verilmeyen bir host üzerinden sunucuya bağlanmaya çalışan kullanıcıya gönderilen hata mesajıdır.

464 ERR_PASSWDMISMATCH
":Password incorrect"

- Şifre gerektiren bir bağlantı kurulmaya çalışırken şifre girilmediği ya da şifrenin yanlış girildiği anlamına gelir.

465 ERR_YOUREBANNEDCREEP
":You are banned from this server"

- Giriş yasağı konmuş bir host'tan bağlantı kurmaya çalışan kullanıcıya gönderilen hata mesajıdır. (Banlısınız)

467 ERR_KEYSET
"<kanal> :Channel key already set"

- Giriş şifresi mevcut olan bir kanala şifre konmaya çalışıldığında alınan hata mesajıdır.

471 ERR_CHANNELISFULL
"<kanal> :Cannot join channel (+l)"

- Kullanıcı limiti dolu olan bir kanala girilmeye çalışıldığında alınan hata mesajıdır.

472 ERR_UNKNOWNMODE
"<karakter> :is unknown mode char to me"

- Kanala bilinmeyen bir mod konmaya çalışıldığında alınan hata mesajıdır. (örneğin: /mode #helpethos +ğ)

473 ERR_INVITEONLYCHAN
"<kanal> :Cannot join channel (+i)"

- +i modundaki bir kanala girilmeye çalışıldığında alınan hata mesajıdır.

474 ERR_BANNEDFROMCHAN
"<kanal> :Cannot join channel (+b)"

- Banlı olunan bir kanala girilmeye çalışıldığında alınan hata mesajıdır.

475 ERR_BADCHANNELKEY
"<kanal> :Cannot join channel (+k)"

- +k modundaki bir kanala girmeye çalışıldığında şifre girilmediğini ya da yanlış şifre girildiğini ifade eder.

481 ERR_NOPRIVILEGES
":Permission Denied- You're not an IRC operator"

- IRCOP yetkisi gerektiren bir komut flag sahibi olmayan bir kullanıcı tarafından kullanıldığı zaman alınan hata mesajıdır.

482 ERR_CHANOPRIVSNEEDED
"<kanal> :You're not channel operator"

- Kanalda operatör durumunda olunması gereken bir komut prefix sahibi olmayan bir kullanıcı tarafından kullanıldığında alınan hata mesajıdır.

483 ERR_CANTKILLSERVER
":You cant kill a server!"

- Bir sunucuya KILL komutu uygulamaya çalışan kullanıcıya gönderilen hata mesajıdır.

491 ERR_NOOPERHOST
":No O-lines for your host"

- Oper şifresi girilmeye çalışılan nickte herhangi bir oper yetkisi bulunmadığı anlamına gelir. (/oper Ekin şifre = Ekin nickinde herhangi bir oper yetkisi yok)

501 ERR_UMODEUNKNOWNFLAG
":Unknown MODE flag"

- Kullanıcının nickine bilinmeyen bir mod almaya çalışması sonucu gönderilen hata mesajıdır. (/mode Ekin +ü = ü modu bulunmuyor)

502 ERR_USERSDONTMATCH
":Cant change mode for other users"

- Kullanıcının kendisi dışında başka bir nickin modlarını görmeye veya değiştirmeye çalıştığında alınan hata mesajıdır.

* 6.2 Komut Yanıtları

300 RPL_NONE
Kullanılmayan bir komut cevabıdır. Sadece yeni özelliklerin denenmesinde kullanılır ancak daemon sürümlerinde yine de bulunur.

302 RPL_USERHOST
":[<cevap>{<boşluk><cevap>}]"

- USERHOST komutuna karşılık olarak kullanılan cevap formatıdır. Cevap satırı aşağıdaki gibi oluşturulur:

<cevap> ::= <nick>['*'] '=' <'+'|'-'><host ismi>

'*' karakteri kullanıcının IRCoperatör olup olmadığını gösterir. '-' ve '+' karakterleri de sırasıyla kullanıcının meşgul olduğunu ya da olmadığını gösterir.

303 RPL_ISON
":[<nick> {<boşluk><nick>}]"

- ISON komutuna karşılık olarak kullanılan cevap formatıdır.

301 RPL_AWAY
"<nick> :<meşgul mesajı>"

305 RPL_UNAWAY
":You are no longer marked as being away"

306 RPL_NOWAWAY
":You have been marked as being away"

- Bu cevaplar (eğer aktifse) AWAY komutu ile birlikte kullanılır. RPL_AWAY meşgul olan bir kullanıcıya PRIVMSG gönderildiğinde alınır. RPL_AWAY sadece kullanıcının bağlı olduğu sunucu tarafından gönderilir. RPL_UNAWAY ve RPL_NOWAWAY cevapları kullanıcı meşgul olduğunda ve meşgul durumundan çıktığında alınır.

311 RPL_WHOISUSER
"<nick> <identd> <host> * :<real name>"

312 RPL_WHOISSERVER
"<nick> <sunucu> :<sunucu bilgisi>"

313 RPL_WHOISOPERATOR
"<nick> :is an IRC operator"

317 RPL_WHOISIDLE
"<nick> <tamsayı> :seconds idle"

318 RPL_ENDOFWHOIS
"<nick> :End of /WHOIS list"

319 RPL_WHOISCHANNELS
"<nick> :{[@|+]<kanal><boşluk>}"

- 311 - 313, 317 - 319 arasındaki cevaplar WHOIS komutuna karşılık verilen cevaplardır. Yeterli parametre kullanıldığında sunucu yukarıdaki cevaplardan birini verir ya da (eğer nick sunucuda değilse) bir hata mesajı verir. RPL_WHOISUSER cevabındaki '*' karakteri wildcard karakter değil gerçek karakter olarak kullanılmıştır. Sadece RPL_WHOISCHANNELS cevabı birden fazla gönderilebilir. Kanal isminin yanındaki '@' ve '+' karakterleri kullanıcının o kanalda sahip olduğu prefix'i belirtir. RPL_ENDOFWHOIS cevabı WHOIS mesajının sona erdiği anlamına gelir.

314 RPL_WHOWASUSER
"<nick> <identd> <host> * :<real name>"

369 RPL_ENDOFWHOWAS
"<nick> :End of WHOWAS"

- Bir WHOWAS mesajına cevap verirken, sunucu verilen listedeki her bir nick için RPL_WHOWASUSER, RPL_WHOISSERVER ya da ERR_WASNOSUCHNICK mesajlarından birini kullanır. Cevap grubunun sonunda, sadece tek bir cevap olsa ve bu da bir hata mesajı olsa dahi RPL_ENDOFWHOWAS cevabı olmalıdır.

321 RPL_LISTSTART
"Channel :Users Name"

322 RPL_LIST
"<kanal> <# visible> :<başlık>"

323 RPL_LISTEND
":End of /LIST"

- RPL_LISTSTART, RPL_LIST ve RPL_LISTEND cevapları sırasıyla başlangıç, bilgi içeren asıl cevaplar ve LIST komutunun sona erdiğini ifade eden sunucu cevabını içeren cevaplardır. Eğer bilgi verilecek herhangi bir kanal yoksa, sadece başlangıç ve son cevapları gönderilir.

324 RPL_CHANNELMODEIS
"<kanal> <mod> <mod parametreleri>"

331 RPL_NOTOPIC
"<kanal> :No topic is set"

332 RPL_TOPIC
"<kanal> :<başlık>"

- Kanal başlığını görmek için TOPIC komutu uygulandığında, başlığın varlığı ya da yokluğuna göre sırasıyla 332 ve 331 numarası cevaplar alınır.

341 RPL_INVITING
"<kanal> <nick>"

- INVITE komutunun başarılı olduğu ve kullanıcıya iletildiği anlamına gelir. (Dökümanda INVITE kullanımı ters olarak verilmiştir. Doğrusu: /invite nick #kanal)

342 RPL_SUMMONING
"<kullanıcı> :Summoning user to IRC"

- SUMMON komutu sonrası sunucu tarafından kullanıcının sunucuya çağrıldığını ifade eden cevaptır.

351 RPL_VERSION
"<versiyon>.<debuglevel> <sunucu> :<yorum>"

- VERSION detaylarını gösteren sunucudan alınan cevaptır. <versiyon> kullanılan yazılımın versiyonunu gösterir (herhangi bir yama seviyesini de içerir). <debuglevel> sunucunun "debug mod"da çalışıp çalışmadığını gösterir. "yorum" kısmında versiyon ya da versiyon detayları ile ilgili bilgileri gösterir.

352 RPL_WHOREPLY
"<kanal> <identd> <host> <sunucu> <nick> <H|G>[*][@|+] :<hopcount> <real name>"

315 RPL_ENDOFWHO
"<isim> :End of /WHO list"

- RPL_WHOREPLY ve RPL_ENDOFWHO ikilisi WHO mesajına cevap olarak kullanılır. RPL_WHOREPLY sadece eğer WHO sorgusuna uyan bir kullanıcı varsa gönderilir. Eğer WHO mesajı ile birlikte kullanılmış parametreler varsa, her bir maddenin sorgusu gönderildikten sonra bir RPL_ENDOFWHO cevabı gönderilir.

353 RPL_NAMREPLY
"<kanal> :[[@|+]<nick> [[@|+]<nick> [...]]]"

366 RPL_ENDOFNAMES
"<kanal> :End of /NAMES list"

- NAMES mesajına cevap olarak, kullanıcıya RPL_NAMREPLY ve RPL_ENDOFNAMES ikilisini içeren bir mesaj gönderilir. Eğer sorguda belirtilen kanal bulunamazsa sadece RPL_ENDOFNAMES gönderilir. Bu durumun bir istisnası olarak NAMES mesajının herhangi bir parametre olmaksızın kullanımı ile tüm görünür kanalların bir listesi RPL_NAMEREPLY cevapları ve bir tane RPL_ENDOFNAMES cevabı ile alınır.

364 RPL_LINKS
"<mask> <sunucu> :<hopcount> <sunucu bilgisi>"

365 RPL_ENDOFLINKS
"<mask> :End of /LINKS list"

- LINKS mesajına cevap olarak sunucu RPL_LINKS numeriğini ve listenin sonunda da RPL_ENDOFLINKS cevabını gönderir.

367 RPL_BANLIST
"<kanal> <banid>"

368 RPL_ENDOFBANLIST
"<kanal> :End of channel ban list"

- Bir kanaldaki banları listelerken sunucu listeyi RPL_BANLIST ve RPL_ENDOFBANLIST cevapları ile gönderir. Her bir ban mask'i için ayrı RPL_BANLIST cevabı gönderilir. Ban mask'leri listelendikten sonra (ya da hiç ban yoksa) RPL_ENDOFBANLIST cevabı gönderilir.

371 RPL_INFO
":<satır>"

374 RPL_ENDOFINFO
":End of /INFO list"

- INFO mesajına cevap veren bir sunucu tüm sunucu bilgilerini bir RPL_INFO cevap dizisi ve dizinin sonunda da bir RPL_ENDOFINFO cevabı ile gönderir.

375 RPL_MOTDSTART
":- <sunucu> Günün mesajı - "

372 RPL_MOTD
":- <metin>"

376 RPL_ENDOFMOTD
":End of /MOTD command"

- MOTD mesajına cevap verilirken MOTD dosyasındaki bilgiler satır satır gösterilir, her bir satır en fazla 80 karakter uzunluğunda olabilir ve her biri için RPL_MOTD formatında cevaplar gönderilir. Bu cevaplardan önce bir tane RPL_MOTD cevabı ve onlardan sonra da RPL_MOTDSTART cevabı bulunur.

381 RPL_YOUREOPER
":You are now an IRC operator"

- RPL_YOUREOPER cevabı kullanıcı OPER komutunu başarılı biçimde kullandığında ve operatör yetkilerine sahip olduğunda alınır.

382 RPL_REHASHING
"<yapılandırma dosyası> :Rehashing"

- Eğer REHASH seçeneği kullanılır ve bir operatör REHASH mesajı gönderirse, operatöre RPL_REHASHING cevabı gönderilir.

391 RPL_TIME
"<sunucu> :<sunucunun lokal zamanını gösteren satır>"

- TIME mesajına cevap verilirken sunucu RPL_TIME formatını kullanarak cevap verir. Zamanı gösteren satır sadece tarihi ve zamanı içerir. Zaman satırı için başka bir gereksinim yoktur.

392 RPL_USERSSTART
":UserID Terminal Host"

393 RPL_USERS
":%-8s %-9s %-8s"

394 RPL_ENDOFUSERS
":End of users"

395 RPL_NOUSERS
":Nobody logged in"

- Eğer bir sunucu USERS mesajı alırsa, RPL_USERSTART, RPL_USERS, RPL_ENDOFUSERS ve RPL_NOUSERS cevapları kullanılır. İlk olarak RPL_USERSSTART cevabı gönderilir, ondan sonra bir RPL_USERS dizisi ya da tek bir RPL_NOUSER cevabı alınır. Bunu takiben de RPL_ENDOFUSERS cevabı alınır.

200 RPL_TRACELINK
"Link <versiyon & debug level> <hedef> <sonraki sunucu>"

201 RPL_TRACECONNECTING
"Try. <class> <sunucu>"

202 RPL_TRACEHANDSHAKE
"H.S. <class> <sunucu>"

203 RPL_TRACEUNKNOWN
"???? <class> [<client IP address in dot form>]"

204 RPL_TRACEOPERATOR
"Oper <class> <nick>"

205 RPL_TRACEUSER
"User <class> <nick>"

206 RPL_TRACESERVER
"Serv <class> <int>S <int>C <sunucu> <nick!identd|*!*>@<host|sunucu>"

208 RPL_TRACENEWTYPE
"<newtype> 0 <client name>"

261 RPL_TRACELOG
"File <logfile> <debug level>"

- RPL_TRACE* cevaplarının tümü sunucu tarafından TRACE mesajına gönderilen cevaplardır. Kaç tanesinin gönderileceği TRACE mesajına ve mesajın bir operatör tarafından gönderilip gönderilmediğine bağlıdır. Hangisinin önce gönderileceği ile ilgili önceden belirlenmiş bir şey yoktur. RPL_TRACEUNKNOWN, RPL_TRACECONNECTING ve RPL_TRACEHANDSHAKE cevapları henüz tam olarak kurulmamış ya da bilinmeyen, hala bağlanmaya çalışan ya da 'server handshake' evresini tamamlamak üzere olan bağlantılar için kullanılır. RPL_TRACELINK cevabı TRACE mesajını bir başka sunucuya iletecek olan herhangi bir sunucu tarafından gönderilir. Tüm ağı kateden bir TRACE komutuna cevap olarak gönderilen bir RPL_TRACELINKs listesi o rota üzerindeki sunucuların gerçek bağlanırlıklarını yansıtmalıdır. RPL_TRACENEWTYPE cevabı diğer kategorilere uymayan ama yine de gösterilen herhangi bir bağlantı için kullanılır.

211 RPL_STATSLINKINFO
"<link ismi> <sendq> <gönderilen mesajlar> <gönderilen bitler> <alınan mesajlar> <alınan bitler> <online süresi>"

212 RPL_STATSCOMMANDS
"<komut> <kullanım sayısı>"

213 RPL_STATSCLINE
"C <host> * <isim> <port> <class>"

214 RPL_STATSNLINE
"N <host> * <isim> <port> <class>"

215 RPL_STATSILINE
"I <host> * <host> <port> <class>"

216 RPL_STATSKLINE
"K <host> * <kullanıcı ismi> <port> <class>"

218 RPL_STATSYLINE
"Y <class> <ping sıklığı> <bağlantı sıklığı> <max sendq>"

219 RPL_ENDOFSTATS
"<stats harfi> :End of /STATS report"

241 RPL_STATSLLINE
"L <hostmask> * <sunucu adı> <maxdepth>"

242 RPL_STATSUPTIME
":Server Up %d days %d:%02d:%02d"

243 RPL_STATSOLINE
"O <hostmask> * <isim>"

244 RPL_STATSHLINE
"H <hostmask> * <sunucu ismi>"

221 RPL_UMODEIS
"<kullanıcı modu satırı>"

- Kullanıcının kendi nick modlarını görmek için uyguladığı komut sonrası gönderilen cevaptır.

251 RPL_LUSERCLIENT
":There are <tamsayı> users and <tamsayı> invisible on <tamsayı> servers" (4 normal kullanıcı ve 9 gizli kullanıcı 2 sunucuda bulunuyor)

252 RPL_LUSEROP
"<tamsayı> perator(s) online" (6 IRC Operatörü bağlı)

253 RPL_LUSERUNKNOWN
"<tamsayı> :unknown connection(s)"

254 RPL_LUSERCHANNELS
"<tamsayı> :channels formed" (4 kanal oluşmuş durumda)

255 RPL_LUSERME
":I have <tamsayı> clients and <tamsayı> servers" (6 kullanıcım ve 1 sunucum bulunuyor)

- Bir LUSERS mesajı alındığında, sunucu RPL_LUSERCLIENT, RPL_LUSEROP, RPL_USERUNKNOWN, RPL_LUSERCHANNELS ve RPL_LUSERME cevaplarından oluşan bir mesaj gönderir. Cevap verirken sunucu RPL_LUSERCLIENT ve RPL_USERME cevaplarını göndermek zorundadır. Diğer cevaplar sadece sıfırdan büyük değerler olduğunda gönderilir.

256 RPL_ADMINME
"<sunucu> :Administrative info"

257 RPL_ADMINLOC1
":<admin bilgisi>"

258 RPL_ADMINLOC2
":<admin bilgisi>"

259 RPL_ADMINEMAIL
":<admin bilgisi>"

- Bir ADMIN mesajına cevap verirken, sunucunun RPL_ADMINME cevabından RPL_ADMINEMAIL cevabına kadar, her biri için bir mesaj göndermesi beklenir. RPL_ADMINLOC1 cevabının sunucucun hangi ülke, eyalet ve şehirde olduğunu, (RPL_ADMINLOC2) hangi üniversitenin hangi departmanında olduğunu ve son olarak da (RPL_ADMINEMAIL) sunucu yönetimi ile iletişime geçilebilecek bir email adresini içermesi beklenir.

* 6.3 Ayrılmış Numerikler

Bu numerikler yukarıda anlatılmamıştır çünkü:

1. Artık kullanılmamaktadırlar;
2. Gelecekte kullanılmak üzere ayrılmışlardır;
3. Kullanımdadırlar ancak IRC protokolünün sosyal olmayan özellikteki kısımları için kullanılırlar.

209 RPL_TRACECLASS
217 RPL_STATSQLINE
231 RPL_SERVICEINFO
232 RPL_ENDOFSERVICES
233 RPL_SERVICE
234 RPL_SERVLIST
235 RPL_SERVLISTEND
316 RPL_WHOISCHANOP
361 RPL_KILLDONE
362 RPL_CLOSING
363 RPL_CLOSEEND
373 RPL_INFOSTART
384 RPL_MYPORTIS
466 ERR_YOUWILLBEBANNED
476 ERR_BADCHANMASK
492 ERR_NOSERVICEHOST


7. KULLANICI VE SUNUCU ONAYI

Kullanıcılar ve sunucular aynı derecede onaydan geçmek durumundadırlar. Kurulan bağlantılarda her ikisi için de host isimlerine göre IP numarası taraması (ve bunun tam tersi) yapılır. Daha sonra her iki bağlantı da şifre (eğer o bağlantı için belirlenmiş bir şifre varsa) kontrolünden geçirilirler. Şifre kontrolü genellikle sadece sunucular ile kullanılsa da, bu kontroller tüm bağlantılar için yapılabilir.

Bunlara ek olarak son zamanlarda sıklaşmaya başlayan bir de kullanıcı ismi kontrolü yapılmaktadır. Bağlantının diğer ucundaki kullanıcı ismi, RFC 1413'te bahsedildiği gibi tipik bir şekilde IDENT gibi bir onay sunucusuna bağlanılarak bulunur.

Şifreler olmaksızın ağ bağlantısının diğer ucunda kimin olduğunu tespit etmek kolay değildir. Bu yüzden sunucular arası bağlantılarda ident sunucusu kullanmak gibi önlemlere ek olarak şifre kullanımı da şiddetle önerilir.


8. MEVCUT UYGULAMALAR

Bu protokolün tek güncel uygulaması 2.8 versiyonlu IRC sunucusudur. Önceki versiyonlar bu dökümanda anlatılan komutların bir kısmını ya da hepsini numerik cevapların birçoğunu NOTICE mesajları ile değiştirerek uygulayabilirler. Ne yazık ki, geriye uyumluluk için gerekenler yüzünden bu dökümandaki bazı kısımların uygulanması tasarlandığı gibi olmaz. Farkedilebilir bir fark şudur:

* Bir mesajdaki herhangi bir LF ya da CR karakteri mesajın sona erdiğini gösterir. (CR-LF'nin gerekiyor olması yerine)

Bu bölümün geri kalanında ele alınan konular daha çok bir sunucu kurmak isteyenlere yöneliktir, ancak bazı kısımlar direkt olarak kullanıcıları da ilgilendirir.

* 8.1 Ağ Protokolü: TCP

IRC TCP üzerine kuruludur çünkü TCP bu konferans sistemine uygun güvenilir bir ağ protokolü sunar. Çoklu ip kullanımı da bir alternatiftir, ama günümüzde yaygın olarak mevcut ya da desteklenebilir değildir.

** 8.1.1 Unix soketlerinin desteklenmesi

Unix domain soketlerinin dinleme/bağlanma operasyonlarına izin verdiği düşünülürse, güncel uygulamanın hem kullanıcı hem de sunucu bağlantılarını Unix soketi üzerinde sağlayacak şekilde ayarlanması sağlanabilir. Bunlar host isimleri '/' karakteri ile başladığı zaman soket olarak tanınırlar.

Unix domain soketinde kurulmuş bağlantılar ile ilgili herhangi bir bilgi sağlanırken, eğer gerçek soket ismi istenmemişse, sunucu yol ismi yerine gerçek host ismi vermelidir.

* 8.2 Komut Ayrıştırması

Kullanıcı ve sunucular için kullanışlı bir 'tamponlanmamış' ağ sağlamak için her bağlantıya kendine özel olarak en yeni okuma ve ayrıştırma sonuçlarının tutulduğu bir 'girdi tampon' verilir. 512 bitlik bir tampon miktarı da 1 bütün mesajı tutmak için ayrılsa da genellikle birden fazla komut tutulur. Özel tampon kısmı her geçerli mesajın okunmasından sonra ayrıştırılır. Tamponda bir kullanıcıdan gelmiş birden fazla mesaj ile ilgilenilirken dikkatli olunmalıdır çünkü bir tanesi kullanıcının sunucu ile bağlantısının kesilmesine sebep olabilir.

* 8.3 Mesaj İletimi

Ağ link'lerinin dolu olduğu ya da veri göndermeye çalıştığımız host'ların veri gönderme konusunda problem yaşadığı durumlarla sıklıkla karşılaşabiliriz. Unix bunu genellikle TCP penceresi ve iç tamponlar yoluyla çözse de, yeni bir link kurulduğunda sunucunun göndereceği çok fazla miktarda veri oluşur ve çekirdekte (kernel'de) sağlanan küçük miktardaki tamponlar çıkış sırası için yeterli olmaz. Bu problemi hafifletmek için, veri gönderimi için FIFO (First In, First Out (İlk giren, ilk çıkar)) sırası olarak bir "gönderim kuyruğu" kullanılır. Tipik bir "gönderim kuyruğu" bağlantısı yavaş olan büyük IRC ağlarına yeni bir sunucu bağlandığı zaman 200 kilobayta kadar büyüyebilir.

Bir sunucu bağlantılarını seçerken önce aldığı tüm veriyi okur ve ayrıştırır, gönderilecek verileri sıralar. Mevcut tüm veriler işlendiğinde, kuyruğa alınmış veriler gönderilir. Bu yazım() sistemi çağrılarının kullanım sayısını düşürür ve TCP'ye daha büyük desteler oluşturma konusunda yardımcı olur.

* 8.4 Bağlantı 'Canlılığı'

Bir bağlantının sona erdiğinin ya da cevap vermediğinin tespit edilmesi için sunucu, bağlantılarının her birine belli bir süre içinde cevap almadığını gösteren ping mesajları atmalıdır.

Eğer bir bağlantı belirlenen süre içinde cevap vermezse, bağlantı uygun prosedürler kullanılarak kapatılır. Bir bağlantı ayrıca izin verilen maksimum sendq miktarı aşıldığında da kapatılır çünkü sunucu işlem blokesi durumundansa yavaş bir bağlantının koparılması daha iyidir.

* 8.5 Sunucu-İstemci Bağlantısının Kurulması

Bir IRC sunucusuna bağlanılırken, kullanıcıya (eğer varsa) MOTD bilgisi ve mevcut kullanıcı/sunucu miktarı gönderilir (Lusers komutuna göre). Sunucunun aynı zamanda kullanıcıya ismini, versiyonunu ve diğer tanıtıcı bilgileri de açık ve net bir biçimde göndermesi beklenir.

Bundan sonra sunucunun, yeni kullanıcının kendisi tarafından girilmiş nick ve diğer bilgilerini (USER komutu) ve kendi tespit ettiği (DNS onay sunucusu) bilgileri ağa bildirir. Sunucu bu bilgiyi önce NICK ve sonra USER olmak üzere aktarır.

* 8.6 Sunucu-Sunucu Bağlantısının Kurulması

Sunucu-sunucu bağlantısının kurulması işlemi tehlikeli olabilir çünkü problemlerin oluşabileceği çok fazla alan vardır - en azından köken sorunları oluşabilir.

Bir sunucu geçerli bir PASS/SERVER ikilisinin takip ettiği bir bağlantı aldıktan sonra, sunucu o bağlantı için kendi PASS/SERVER bilgisini ve diğer durum bilgilerini aktarır.

Bir PASS/SERVER ikilisi başlatılırken, sunucu bağlantıyı kabul etmeden önce öncelikle cevap veren sunucunun uygun biçimde tanınıp tanınmadığını kontrol eder.

** 8.6.1 Bağlantı sırasında durum bilgilerinin sunucular arasında değişimi

Sunucular arasında durum bilgisi alışverişinde düzen önemlidir. İstenen sıra aşağıdaki gibidir:

* bilinen tüm diğer sunucular;
* bilinen tüm kullanıcı bilgileri;
* bilinen tüm kanal bilgileri.

Sunucuları ilgilendiren bilgiler ekstra SERVER mesajları ile, kullanıcıları ilgilendiren bilgiler NICK/USER/MODE/JOIN mesajları ile ve kanalları ilgilendiren bilgiler MODE mesajları ile gönderilir.

NOT: Kanal başlığı bilgileri paylaşılmaz çünkü TOPIC komutu herhangi eski bir başlık bilgisinin üstüne yazılır, yani olsa olsa bağlantının iki tarafı başlık bilgilerini değiştokuş edebilir.

Sunucular ile ilgili durum bilgileri iletilirken, sunucular ile ilgili hali hazırda var olan çakışmalar nick çakışmalarından daha önce gerçekleşir. IRC ağının çevrimsiz bir grafiğe sahip olmasından dolayı ağın başka bir yerde tekrardan bağlanmış olması mümkündür, ve çakışmanın oluştuğu yer ağın nereden ayrılması gerektiğini gösterir.

* 8.7 Sunucu-İstemci Bağlantılarının Sonlandırılması

Bir kullanıcının bağlantısı sona erdiğinde, kullanıcının bağlı bulunduğu sunucu tarafından kullanıcı adına bir QUIT mesajı oluşturulur. Başka bir mesaj oluşturulmaz ya da kullanılmaz.

* 8.8 Sunucu-Sunucu Bağlantılarının Sonlandırılması

Eğer bir sunucu-sunucu bağlantısı bir SQUIT ya da doğal nedenlerde koparsa, ağın geri kalanı kopmanın sebebini tespit eden sunucu tarafından bilgilendirilir. Sunucu daha sonra bir SQUIT listesi (bağlantısı kopan sunucular için) ve bir QUIT listesi (bağlantısı kopan kullanıcılar için) oluşturur.

* 8.9 Nick Değişikliklerinin Takibi

Tüm IRC sunucuları yakın zamanda yapılmış olan nick değişikliklerinin bir kaydını tutar. Bu durum sunucuların nick değişikliği sebebiyle oluşan tür durumlarını takip edebilmesi ve hangi komutların kullanılacağına karar vermesi için gereklidir. Nick değişikliklerini izlemesi gereken komutlar aşağıdaki gibidir:

* KILL (nickin bağlantısı kesilir)
* MODE (+/- o,v)
* KICK (nick kanaldan uzaklaştırılır)

Nick değişikliklerini izlemesi gereken başka bir komut yoktur.

Yukarıdaki durumlarda sunucu önce nickin varlığını kontrol eder, daha sonra geçmişine bakar ve nickin şu anda kime ait olduğunu (eğer birine aitse) belirler. Bu çakışma durumlarının olasılığını düşürür ancak sunucunun yanlış kullanıcıyı seçmesi ile yine de oluşabilirler. Yukarıdaki komutların herhangi biri ile bir değişiklik takip edilecekse bir zaman dilimi belirlenmesi ve çok eski girdilerin dikkate alınmaması önerilir.

Uygun bir geçmiş kaydı için sunucunun, eğer hepsi değiştirmeye karar verdi ise, tanıdığı her kullanıcı için bir önceki nick kaydını tutabiliyor olması gerekir. Bu boyut hafıza vb. diğer faktörlerden etkilenir.

* 8.10 İstemcilerin Flood Kontrolü

Büyük bir IRC ağında, herhangi bir kullanıcının ağı aşırı mesaj gönderimi ile yavaşlatması ve diğer kullanıcıların aldığı hizmet kalitesini düşürmesi mümkündür. Her 'kurban'ın kendini korumasını beklemek yerine, sunucular dışında tüm kullanıcılar için geçerli olacak bir flood koruması yazılmıştır. Güncel algoritma aşağıdaki gibidir:

* Kullanıcının mesaj zamanlayıcısının güncel zamandan daha az olup olmadığı kontrol edilir (eğer öyle ise eşitlenir);
* Kullanıcıdan gelen her veri okunur;
* Eğer zamanlayıcı güncel zamanın 10 saniyeden daha az bir şekilde ilerisindeyse, mevcut tüm mesajlar ayrıştırılır ve kullanıcı her mesaj için 2 saniye ile cezalandırılır; yani kullanıcı her iki saniyede 1 mesaj gönderebilir.

* 8.11 Tıkanmasız Aramalar

Eşzamanlı bir çevrede, sunucunun her kullanıcıya eşit biçimde hizmet verebilmesi için işlemlerde mümkün olan en az gecikmenin olması önemlidir. Bu da tüm ağ okuma/yazma işlemlerinde tıkanmasız IO (Input-Output (Girdi-Çıktı)) kullanılmasını gerektirir. Normal sunucu bağlantılarında bu zor değildi ancak sunucunun bloke olmasına sebep olan diğer destek operasyonları (disk okuma gibi) vardır. Bu gibi işlemler mümkün olduğunca kısa zaman aşımı sürelerinde yapılmalıdır.

** 8.11.1 Hostname (DNS) aramaları

Berkeley ve diğerlerinden standart çözücü kütüphanelerini kullanmak bazı durumlarda büyük gecikmelere ve zaman aşımlarına sebep olmuştur. Bundan kaçınmak için, tıkanmasız girdi-çıktı operasyonları için hazırlanan ve daha sonra ana sunucu girdi-çıktı döngüsü tarafından seçilen ayrı DNS rutinleri yazılmıştır.

** 8.11.2 Username (Ident) aramaları

Kullanım ve diğer programlara dahil edilmek üzere birçok ident kütüphanesi vardır ancak bunlar senkronize bir şekilde işlendiği ve sıklıkla gecikmelere sebep olduğu için problem çıkarmıştır. Çözüm yine sunucunun geri kalanı ile ortak çalışacak ve tıkanmasız girdi-çıktı sistemi kullanacak ayrı bir rutinin yazılması ile bulunmuştur.

* 8.12 Konfigürasyon Dosyası

Sunucuyu kurmak ve işletmek için esnek bir yöntem sağlamak için, her konfigürasyon dosyasının aşağıdaki kullanım talimatlarına göre kullanılması önerilir:

* hangi host'lardan kullanıcı bağlantısı kabul edileceği;
* hangi host'lardan sunucu bağlantısı kabul edileceği;
* hangi host'lardan her iki bağlantıya da izin verileceği (aktif ve pasif);
* sunucu ile ilgili yer bilgileri (üniversite, şehir/eyalet, şirket vb buna örnek gösterilebilir);
* sunucudan kimin sorumlu olduğu ve iletişim kurmak için bir mail adresi;
* kısıtlı operatör komutlarına erişmek isteyen kullanıcılar için host ismi ve şifreler.

Host isimleri belirlenirken, hem alan isimleri hem de 'nokta'ların kullanımı (127.0.0.1) kabul edilmelidir. Şifrelerin hem giriş hem de çıkış bağlantıları için kullanılabilir ve kabul edilebilir olacak şekilde belirlenmesi gerekir. (tek çıkış bağlantısı sunucular ile olan bağlantılardır.)

Yukarıdaki liste herhangi bir sunucunun diğeri ile bağlantı kurması için yerine getirmesi gereken minimum gerekliliklerdir. Diğerleri aşağıdaki gibidir:

* diğer sunucunun hangi sunucuları tanıtabileceğini belirleme;
* sunucu bölümlerinin ne kadar genişleyebileceğini belirleme;
* kullanıcıların hangi saatlerde bağlanabileceğini belirleme.

** 8.12.1 Kullanıcıların bağlanmasına izin verme

Bir sunucu başlangıçta okunan ve kullanıcıların bağlanmak için hangi host'ları kullanacağını belirleyen bir çeşit 'erişim kontrol listesi' (konfigürasyon dosyasında ya da başka bir yerde) kullanmalıdır.

Host erişim kontrolü için esneklik sağlamak adına hem 'kabul et' hem de 'reddet' seçenekleri uygulanmalıdır.

** 8.12.2 Operatörler

Uygunsuz bir insana operatör ayrıcalıkları tanımak IRC ağının düzeni için yıkıcı sonuçlara sebep olabilir. Bu yüzden bu tür güçlerin elde edilmesi çok kolay olmamalıdır. Güncel ayarlar iki adet şifre gerektirir, ancak bunlardan biri genellikle kolayca tahmin edilebilir. Oper şifrelerinin konfigürasyon dosyasında saklanması ve kolayca çalınmasını önlemek için crypt(3) gibi gizlenmiş bir formatta saklanması tercih edilir.

** 8.12.3 Sunucuların bağlanmasına izin verme

Bir sunucu için çoklu bağlantı önemli bir durum değildir, ancak kötü bir bağlantı IRC'nin kullanışlılığı açısından büyük bir etki yaratabilir. Bu yüzden her sunucunun bağlanabileceği ve kendisine bağlanmasına izin vereceği bir sunucu listesi bulunması gerekir. Bir sunucu hiçbir durumda kendisine bilinmeyen bir bağlantıdan sunucu bağlantısı kurulmasına izin vermemelidir. Hangi sunucuların bağlanabileceği ve bağlanamayacağına ek olarak, konfigürasyon dosyasında ayrıca link'ler ile ilgili şifre ve diğer özelliklerin de bulunması gerekir.

** 8.12.4 Administrivia

ADMIN komutuna eksiksiz ve geçerli cevaplar sağlamak için (bkz: 4.3.7) sunucunun konfigürasyon dosyasında gerekli detayların bulunması gerekir.

* 8.13 Kanal Üyeliği

Şimdiki protokol kayıtlı herhangi bir lokal kullanıcının 10 adete kadar farklı kanala katılabilmesine izin verir. Lokal olmayan kullanıcılar için böyle bir kısıtlama yoktur.


9. MEVCUT PROBLEMLER

Bu protokol ile ilgili tanımlanmış birkaç problem vardır, yakın bir gelecekte protokolün yeniden yazılması ile bu sorunların çözüleceği umulmaktadır. Şu anda bu problemlerin çözülmesi ile ilgili çalışmalar yapılmaktadır.

* 9.1 Ölçeklenirlik

Protokolün geniş bir alanda kullanıldığında yeteri derecede ölçeklenmediği görülmüştür. Ana problem tüm sunucuların diğer sunucular ve onların kullanıcıları ile ilgili detayları bilmek durumunda olması ve bu bilgilerin değiştiği anda güncellenmesi gerekmesinden çıkar. Bağlı bulunan sunucu sayısının düşük tutulması ve iki nokta arasındaki uzaklığın mümkün olan en kısa duruma getirilmesi bu sorunun bir nebze önüne geçebilir.

* 9.2 Etiketler

Güncel IRC protokolü 3 çeşit etiket içerir: nick, kanal ismi ve sunucu ismi. Her bir çeşit kendine ait alan sahibidir ve o alan içinde herhangi bir ikiliğe izin verilmez. Şu anda kullanıcıların bu üçünden herhangi biri için etiket seçmesi mümkündür ve bu da çakışmalara sebep olur. Bu durum nick ve kanallar için birbirleri ile çakışmayan özgün isimler belirlenmesini sağlayacak bir plan oluşturulması gerektiğini göstermektedir.

** 9.2.1 Nickler

IRC üzerinde nick fikri kullanıcıların kanal dışında sohbet ederken kullanmaları için çok uygundur, ama sadece kısıtlı bir nick alanı vardır ve birden fazla kişinin aynı nicki kullanmak istemesi yaygın bir durumdur. Eğer aynı nick bu protokolü kullanan iki kişi tarafından seçilirse, ya bir taraf başarılı olamayacak ya da her iki tarafın da bağlantısı KILL ile kesilecektir. (bkz: 4.6.1)

** 9.2.2 Kanallar

Mevcut kanal düzeni tüm sunucuların tüm kanalları, kanallardaki kullanıcıları ve özelliklerini bilmesini gerektirir. İyi ölçeklenir olmamasının yanında gizlilik durumu da söz konusudur. Bir kanal çakışması, nick çakışmasının aksine kapsamlı bir durum olarak değerlendirilir. (Yeni kanalı oluşturan ve o kanalda bulunan tüm kullanıcıları kapsar)

** 9.2.3 Sunucular

Sunucuların sayısı kanallar ve nicklerin sayısı ile karşılaştırıldığında genellikle daha düşük olsa da, ikisinin de ayrı olarak ya da bir mask aracılığıyla global olarak bilinmesi gerekir.

* 9.3 Algoritmalar

Bir grup kullanıcının kanal listesini kontrol etme gibi komutlar sunucuya kodlanırken, N^2 algoritması kullanılmak zorundadır.

Güncel sunucu versiyonlarında herhangi bir veritabanı tutarlılığı kontrolü yoktur. Her sunucu komşu sunucunun doğru çalıştığını varsayar. Bu eğer bağlantı kuran sunucuda sorun varsa büyük problemlerin oluşmasına zemin hazırlar.

Lokal ve global özgün etiketlerin eksikliği yüzünden birçok tür sorunu mevcuttur. Bu durumlar genellikle mesajların IRC'ye ulaşması konusu ve bunun IRC ağı üzerindeki ters etkileri ile alakalıdır. Özgün etiketlere geçilse bile kötüye kullanılan kanal komutları ile ilgili problemler devam etmektedir.


10. MEVCUT DESTEK VE KULLANILIRLIK

IRC ile ilgili sorularınız için adres listesi:
Gelecek protokol:
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

Genel tartışma:
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Yazılım uygulamaları:
cs.bu.edu:/irc
nic.funet.fi:/pub/irc
coombs.anu.edu.au:/pub/irc

Haber Grubu: alt.irc


11. GÜVENLİK DURUMLARI

Güvenlik konuları 4.1, 4.1.1, 4.1.3, 5.5 ve 7. bölümlerde anlatılmıştır.


12. YAZARLARIN ADRESLERİ

Jarkko Oikarinen
Tuirantie 17 as 9
90500 OULU
FINLAND

Email:
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.



Darren Reed
4 Pateman Street
Watsonia, Victoria 3087
Australia

Email: avalon@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]mbs.anu.edu.au
Aşağıda bulunan RFC 1459 dökümanının Türkçe çevirisinin tüm hakkı HelpEthos.Net'e aittir.

Çeviri : @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
Düzenleme : @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]


Ağ Çalışma Grubu
Request for Comments (RFC): 1459
J. Oikarinen
D. Reed
Mayıs 1993


İnternet Aktarmalı Sohbet Protokolü

Dökümanın İçeriği

Bu döküman internet topluluğu için deneysel bir protokolü anlatır. Gelişim için tartışma ve önerilere ihtiyaç vardır. Bu protokolün standartlaştırma şekli ve durumu için lütfen IAB (Internet Activities Board - İnternet Aktiviteleri Kurulu) Resmi Protokol Standartları'nın güncel nushasını kaynak gösteriniz.


Özet

IRC protokolü ilk olarak bir BBS (Bulletin Board System - Bilgisayarlı Bilgi Sistemi) üzerindeki kullanıcıların kendi aralarında yazışabilmeleri için hayata geçirildi ve son 4 yıl içinde çok ilerleme kaydetti. Şu an dünya çapında bir sunucular ağı ve kullanıcılarını taşıyor ve bu büyümeyle başa çıkmaya çalışıyor. Geçtiğimiz 2 yıl içinde ana IRC ağına bağlanan kullanıcıların ortalama sayısı 10 kat artmış durumdadır.

IRC protokolü, en yalın istemcisi sunucuya bağlanabilen bir soket program olan metin tabanlı bir protokoldür.


İÇİNDEKİLER

1. GİRİŞ
* 1.1 Sunucular
* 1.2 İstemciler (Kullanıcılar)
** 1.2.1 Operatörler
* 1.3 Kanallar
** 1.3.1 Kanal operatörleri

2. IRC TEKNİK ÖZELLİKLERİ
* 2.1 Genel Bakış
* 2.2 Karakter Kodları
* 2.3 Mesajlar
** 2.3.1 Sahte BNF (Backus-Naur Form) mesaj formatı
* 2.4 Numerik Cevaplar

3. IRC KAVRAMLARI
* 3.1 Birebir İletişim
* 3.2 Çoklu
** 3.2.1 Bir listeye
** 3.2.2 Bir gruba (kanala)
** 3.2.3 Bir host/sunucu mask'ine
* 3.3 Toplu
** 3.3.1 Kullanıcıdan kullanıcıya (İstemciden istemciye)
** 3.3.2 Kullanıcıdan sunucuya
** 3.3.3 Sunucudan sunucuya

4. MESAJ DETAYLARI
* 4.1 Bağlantı Kaydı
** 4.1.1 Password mesajı
** 4.1.2 Nick mesajı
** 4.1.3 User mesajı
** 4.1.4 Server mesajı
** 4.1.5 Oper mesajı
** 4.1.6 Quit mesajı
** 4.1.7 Server quit mesajı
* 4.2 Kanal İşlemleri
** 4.2.1 Join mesajı
** 4.2.2 Part mesajı
** 4.2.3 Mode mesajı
*** 4.2.3.1 Kanal modları
*** 4.2.3.2 Nick modları
** 4.2.4 Topic mesajı
** 4.2.5 Names mesajı
** 4.2.6 List mesajı
** 4.2.7 Invite mesajı
** 4.2.8 Kick mesajı
* 4.3 Sunucu Sorgu ve Komutları
** 4.3.1 Version mesajı
** 4.3.2 Stats mesajı
** 4.3.3 Links mesajı
** 4.3.4 Time mesajı
** 4.3.5 Connect mesajı
** 4.3.6 Trace mesajı
** 4.3.7 Admin mesajı
** 4.3.8 Info mesajı
* 4.4 Mesaj Gönderme
** 4.4.1 Private mesajlar
** 4.4.2 Notice mesajları
* 4.5 Kullanıcı Tabanlı Sorgular
** 4.5.1 Who sorgusu
** 4.5.2 Whois sorgusu
** 4.5.3 Whowas mesajı
* 4.6 Çeşitli Mesajlar
** 4.6.1 Kill mesajı
** 4.6.2 Ping mesajı
** 4.6.3 Pong mesajı
** 4.6.4 Error mesajı

5. OPSİYONEL MESAJLAR
* 5.1 Away Mesajı
* 5.2 Rehash Komutu
* 5.3 Restart Komutu
* 5.4 Summon Mesajı
* 5.5 Users Mesajı
* 5.6 Operwall Komutu
* 5.7 Userhost Mesajı
* 5.8 Ison Mesajı

6. CEVAPLAR
* 6.1 Hata Cevapları
* 6.2 Komut Yanıtları
* 6.3 Ayrılmış Numerikler

7. KULLANICI VE SUNUCU ONAYI

8. MEVCUT UYGULAMA DETAYLARI
* 8.1 Ağ Protokolü: TCP
** 8.1.1 Unix soketlerinin desteklenmesi
* 8.2 Komut Ayrıştırması
* 8.3 Mesaj İletimi
* 8.4 Bağlantı 'Canlılığı'
* 8.5 Sunucu-İstemci Bağlantısının Kurulması
* 8.6 Sunucu-Sunucu Bağlantısının Kurulması
** 8.6.1 Bağlantı sırasında durum bilgisi değişimi
* 8.7 Sunucu-İstemci Bağlantılarının Sonlandırılması
* 8.8 Sunucu-Sunucu Bağlantılarının Sonlandırılması
* 8.9 Nick Değişikliklerinin Takibi
* 8.10 İstemcilerin Flood Kontrolü
* 8.11 Tıkanmasız Aramalar
** 8.11.1 Hostname (DNS) aramaları
** 8.11.2 Username (Ident) aramaları
* 8.12 Konfigürasyon Dosyası
** 8.12.1 Kullanıcıların bağlanmasına izin verme
** 8.12.2 Operatörler
** 8.12.3 Sunucuların bağlanmasına izin verme
** 8.12.4 Administrivia
* 8.13 Kanal Üyeliği

9. MEVCUT PROBLEMLER
* 9.1 Ölçeklenirlik
* 9.2 Etiketler
** 9.2.1 Nickler
** 9.2.2 Kanallar
** 9.2.3 Sunucular
* 9.3 Algoritmalar

10. DESTEK VE KULLANILIRLIK

11. GÜVENLİK DURUMLARI

12. YAZARLARIN ADRESLERİ


1. GİRİŞ

IRC protokolü birkaç yıl içinde metin tabanlı görüşme sağlanabilmesi amacıyla tasarlanmıştır. Bu döküman güncel IRC protokolünü tanımlar.

IRC protokolü TCP/IP ağ protokolünü kullanan sistemler üzerinde geliştirilmiştir, ancak işlem gördüğü alanda kısıtlı kalması gibi bir kural yoktur.

IRC'nin kendisi kullanıcı-sunucu modeli yoluyla dağıtımlı bir şekilde birçok makine üzerinde çalışmaya uygun bir telekonferans sistemidir. Tipik bir IRC düzeneği, sunucunun kullanıcılar veya diğer sunucuların bağlanacağı bir merkez nokta oluşturması ve istenen mesaj iletimleri ve çoklaması gibi işlevleri gerçekleştirmesidir.

* 1.1 Sunucular

Kullanıcıların birbirleri ile yazışmak için bağlanabileceği ve diğer sunucuların da bağlanarak bir IRC ağı kurabileceği bir nokta sağlayan sunucular, IRC'nin belkemiğini oluşturur. IRC sunucuları için sağlanmış olan tek ağ konfigürasyonu dalları yayılmakta olan bir ağaç şemasına benzer, bu şemada her sunucu diğerleri için merkez düğüm pozisyonundadır.


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


:
[ vb. ]
:

[ Şema 1. IRC sunucu ağı formatı ]

* 1.2 İstemciler (Kullanıcılar)

Bir kullanıcı, bir sunucuya bağlanan bir başka sunucu dışındaki her şeydir. Her kullanıcı diğer kullanıcılardan maksimum 9 karakter olan nickleri ile ayrılır. Hangi karakterlerin nicklerde kullanılabileceği ve hangilerinin kullanılamayacağını görmek için gramer kuralları protokolünü inceleyiniz. Nicke ek olarak, tüm sunucuların bütün kullanıcılar ile ilgili şu bilgilere sahip olması gerekir: kullanıcının kullanıyor olduğu host'un isim bilgileri, kullanıcının o host üzerindeki isim bilgisi (identd) ve kullanıcının bağlı olduğu sunucu bilgisi.

** 1.2.1 Operatörler

IRC ağında gerekli miktarda düzenin sağlanabilmesi için özel bir statüye sahip kullanıcıların ağ üzerinde genel bakım işlevlerini kullanmasına izin verilir. Operatörlere verilmiş olan güçler 'tehlikeli' olarak nitelendirilebilse bile gereklidirler. Operatörler uzun süreli ağ yönlendirmesi gibi zararlı durumları engellemek için sunucuları ağa bağlayabilme/bağlantılarını koparabilme gibi temel görevleri yerine getirebilir nitelikte olmalıdırlar. Buna ihtiyaç duyulduğunda, burada tartışılan protokol operatörlerin sadece bu gibi işlevleri kullanabiliyor olmalarını sağlar. (4.1.7 (SQUIT) ve 4.3.5 (CONNECT) bölümlerine bakınız.)

Operatörlerin daha tartışılır bir yetkisi ise ağa bağlı bulunan bir kullanıcıyı zor kullanarak uzaklaştırmaktır, yani operatörler herhangi bir kullanıcının sunucu ile bağlantısını kesme yetkisine sahiptir. Bu yetkinin durumu biraz hassastır, çünkü kötüye kullanımı hem yıkıcı hem de sinir bozucudur. Bu tarz bir eylem ile ilgili daha fazla bilgi almak için 4.6.1 (KILL) bölümüne bakınız.

* 1.3 Kanallar

Kanal, bir ya da daha fazla kullanıcının oluşturduğu isimlendirilmiş bir gruptur. Bu gruba dahil olan tüm kullanıcılar, kanala gönderilen mesajları alırlar. Kanal, ilk kullanıcı giriş yaptığı an oluşturulur ve son kullanıcı kanalı terkettiği an yok olur. Bir kanal var olduğu sürece her kullanıcı kanalın ismini kullanarak referans gösterebilir.

Kanal isimleri '&' ya da '#' karakterleri ile başlarlar ve 200 karaktere kadar uzayabilirler. İlk karakterin & ya da # olması kuralı dışında kanal isimlerindeki tek kısıtlama boşluk bırakılamıyor olması, ^G (ASCII 7) ya da virgül (,) kullanılamıyor olmasıdır. (Virgül kanalları ayırmak için kullanılan bir list işlecidir.)

Bu protokol tarafından desteklenen iki çeşit kanal vardır. İlki ağa bağlı olan tüm sunucular tarafından tanınan dağıtımlı kanallardır. Bu kanalların simgeleri # ile gösterilir ve ağ üzerindeki bütün kullanıcılar bu kanallara girebilirler. İkincisi ise sadece kanalın bulunduğu sunucu üzerindeki kullanıcıların girebileceği kanallardır, bunlar ise & ile gösterilirler. Bu iki kanal çeşidinin de üzerinde kişisel kanalların özelliklerini değiştirebilecek çeşitli kanal modları bulunur. Ayrıntılı bilgi için 4.2.3 (MODE komutu) bölümüne bakınız.

Bir kanal oluşturmak ya da oluşmuş bir kanala dahil olmak için kullanıcının kanala girmesi, yani ''join'' gerçekleştirmesi gerekir. Eğer kanal, kullanıcı kanala girmeden önce mevcut değilse, girişle birlikte kanal oluşturulur ve oluşturan kullanıcı kanal operatörü olur. Eğer kanal hali hazırda mevcutsa, kullanıcının kanala giriş isteği yani ''join'' denemesi kanalın modları ile alakalı olarak sağlanır ya da engellenir. Örneğin, kanal davet edilenlere açık (+i) modda ise, kullanıcı ''kanaldan biri tarafından'' davet edilmediği sürece kanala giremez. Protokolün bir parçası olarak bir kullanıcı aynı anda birden fazla kanalda bulunabilir, ancak maksimum 10 gibi bir limit hem tecrübeli hem de acemi kullanıcılar için yeterli görülür. Ayrıntılı bilgi için 8.13 bölümüne bakınız.

Eğer IRC ağı iki sunucu arasındaki kopukluk yüzünden bölünürse, muhtemelen kanal iki sunucudan birinde var olmaya devam etmeyecektir, ancak ikisinde birden açık kalmaya devam ederse, sadece o sunucularda bulunan kullanıcılar kanalda kalacaktır. Link tekrar kurulduğunda iki sunucu birbirine o kanalda hangi kullanıcıların bulunuyor olduğunu ve kanal modlarını bildirir. Eğer kanal iki tarafta birden mevcutsa, girişler ve modlar kapsamlı bir şekilde tanımlanır, böylece kurulan yeni bağlantı sonrası hangi kullanıcıların kanalda olduğu ve kanalın hangi modlara sahip olduğu her iki sunucu tarafından belirlenir.

** 1.3.1 Kanal operatörleri

Bir kanaldaki kanal operatörü (''chop'' ya da ''chanop'' olarak da ifade edilir) o kanalın 'sahibi' kabul edilir. Bu statünün tanınması için kanal operatörleri kanalın işleyişini ve huzurunu korumaları adına bazı yetkilerle donatılmıştır. Kanal operatörleri, bir kanalın sahibi olarak yaptıkları herhangi bir şey için, kötü niyetli de olsa, mazeret belirtmek durumunda değildirler. Bu gibi durumlarda bir IRC operatöründen yardım istenebilir, ya da kullanıcı kanalı terkeder, başka bir kanala gider ya da kendi kanalını yaratır.

Sadece kanal operatörleri tarafından kullanılabilen komutlar şöyledir:

KICK - Bir kullanıcıyı kanaldan atmak için kullanılır.
MODE - Kanalın modlarını değiştirmek için kullanılır.
INVITE - Bir kullanıcıyı kanala davet etmek için kullanılır. (+i modu)
TOPIC - +t modundaki bir kanalın kanal başlığını değiştirmek için kullanılır.

Kanal operatörleri kanalda nicklerinin yanındaki @ işareti ile belirtilirler. (NAMES, WHO ve WHOIS komutlarında da bu işaret görülür.)


2. IRC TEKNİK ÖZELLİKLERİ

* 2.1 Genel Bakış

Burada tanımlanan protokol hem sunucu-sunucu hem de kullanıcı-sunucu bağlantıları için kullanılmaktadır. Ancak kullanıcı bağlantıları üzerinde daha çok kısıtlamalar vardır, çünkü bu bağlantılar sunucu bağlantılarına göre 'güvenilemez' olarak nitelendirilirler.

* 2.2 Karakter Kodları

Özel bir karakter grubu belirlenmemiştir. Protokol, sekizliler oluşturan 8 bitlik kodlardan oluşan bir grup üzerine kurulmuştur. Her mesaj bu sekizlilerden herhangi bir miktarda içerebilir, ancak bazı sekizli değerleri mesaj sınırlayıcıları olarak işleyen kontrol kodları yerine kullanılmaktadır.

8 bitlik bir protokol olmasına bakılmaksızın, sınırlayıcılar ve anahtar kelimeler protokolün USASCII birimi ve telnet bağlantısı için en kullanışlı şekilde olması için tasarlanmıştır.

IRC'nin Iskandinav kökeni sebebiyle {}| karakterleri sırasıyla []\ karakterlerinin küçük harfleri olarak kabul edilirler. Bu iki nickin denkliğinin belirlenmesi açısından önemli bir durumdur.

* 2.3 Mesajlar

Sunucular ve kullanıcılar birbirlerine bir cevap yaratan ya da yaratmayan mesajlar gönderirler. Eğer gönderilen mesaj geçerli bir komut içeriyorsa, daha sonraki bölümlerde de anlatılacağı gibi kullanıcı bir cevap beklemelidir ancak bu da bir cevap için sonsuza kadar beklenmesi gerektiği şeklinde anlaşılmamalıdır, kullanıcı-sunucu ve sunucu-sunucu arasındaki iletişim esasında eşzamanlı değildir.

Her IRC mesajı 3 ana bölümden oluşur. Prefix (opsiyonel), komut ve komut parametreleri (maksimum 15 adet olabilir). Prefix, komut ve tüm komut parametreleri bir (veya daha fazla) ASCII boşluk karakteri ile birbirinden ayrılırlar (0x20).

Prefix'in varlığı bir adet ASCII kolon karakteri ile gösterilir. (':', 0x3b), bu mesajın ilk karakteri olmak zorundadır. Kolon ile prefix arasında bir boşluk olmamalıdır. Prefix, sunucular tarafından mesajın gerçek kaynağını belirtmek için kullanılır. Eğer mesajda prefix bulunmuyorsa, mesajın alındığı bağlantı tarafından gönderildiği varsayılır. Kullanıcılar mesaj gönderirken prefix kullanmamalıdırlar, kullanacak olsalar dahi tek geçerli prefix kullanıcı ile ilişkilendirilen kayıtlı nickidir. Eğer prefix ile tanımlanmış olan kaynak, sunucunun dahili veritabanında bulunmuyorsa ya da kaynak mesajın ulaştığı link'ten değil başka bir link'ten bağlantı kurmuşsa, sunucu mesajı sessizce görmezden gelmelidir.

Komut ya geçerli bir IRC komutu olmalıdır, ya da ASCII tablosunda gösterilen 3 basamaklı sayılardan biri olmalıdır.

IRC mesajları daima CR-LF ikilisi ile sınırlandırılmış satırlardır, ve bu mesajlar uzunlukta CR ve LF (Carriage Return (Satırbaşı) - Line Feed (Satır Besleme - Satırsonu)) de dahil olmak üzere 512 karakteri geçmemelidir. Yani komut ve parametreleri için izin verilen maksimum karakter sayısı 510'dur. Mesaj satırlarının devamı için herhangi bir şart yoktur. Bu konudaki güncel uygulamalar hakkında 7. bölümden ayrıntılı bilgi edinebilirsiniz.

** 2.3.1 Sahte BNF (Backus-Naur Form) mesaj formatı

Protokol mesajlarının bitişik sekizli akışından ayrılması gerekmektedir. Bunun çözümü için de CR ile LF karakterleri mesaj ayırıcıları olarak tasarlanmıştır. Mesajlar arasındaki CR-LF dizisinin kullanımını herhangi bir problem olmaksızın sağlamak adına boş mesajlar görmezden gelinir.

Oluşturulan mesaj <middle> veya <trailing> öğeleri ile eşleşen prefix, komut ve komut parametreleri olarak kısımlara bölünür.

Bunun için BNF gösterimi:

<mesaj> ::= [':' <prefix> <SPACE> ] <komut> <parametreler> <crlf>
<prefix> ::= <sunucuadı> | <nick> [ '!' <identd> ] [ '@' <host> ]
<komut> ::= <harf> { <harf> } | <sayı> <sayı> <sayı>
<SPACE> ::= ' ' { ' ' }
<parametreler> ::= <SPACE> [ ':' <trailing> | <middle> <parametreler> ]

<middle> ::= <*Boş olmayan* ve SPACE, NUL, CR ya da LF karakteri içermeyen, ilki ':' olmayan herhangi bir sekizli dizisi>
<trailing> ::= <*Boş* da olabilen, NUL, CR ya da LF içermeyen herhangi bir sekizli dizisi>
<crlf> ::= CR LF

NOTLAR:

1) <SPACE> sadece boşluk karakter(ler)iden oluşur (0x20). Özellikle dikkate alınmalıdır ki TABULATION (sıralama) ve bütün diğer kontrol karakterleri NON-WHITE-SPACE (beyaz olmayan boşluk) karakterleri olarak kabul edilir.

2) Parametre listesini çıkardıktan sonra, <middle> ya da <trailing> farketmeksizin tüm parametreler eşittir. <trailing> parametreler arasında boşluk olmasını sağlayan sentaktik bir hiledir.

3) CR ve LF karakterlerinin parametre dizilerinde görülmüyor olması mesaj yapısından kaynaklanır. Bu daha sonra değiştirilebilir.

4) NUL karakteri mesaj yapısında bulunmaz, bir parametrenin içinde de bulunabilir, ancak normal C dizilerinde ekstra karışıklık yaratabilir. Bu yüzden mesaj içinde NUL kullanımına izin verilmemektedir.

5) Son parametre boş bir dizi olabilir.

6) Genişletilmiş prefix kullanımı (['!' <identd> ] ['@' <host> ]) sunucu-sunucu iletişimlerinde kullanılmamalı ve sadece sunucudan kullanıcıya gönderilen mesajlarda, kullanıcılara mesajın kim tarafından gönderildiği ile ilgili ekstra sorgu gerektirmeksizin daha yararlı bilgiler sağlamak adına kullanılmalıdır.

Protokol mesajlarının çoğunluğu ayrılmış parametre dizileri için listedeki yerlerine göre yazdırılmış ilave şemantik ve sentaks (anlambilim ve sözdizimi) tayin ederler. Örneğin, birçok sunucu komutu, komuttan sonraki ilk parametreyi bir hedef listesi olarak görecektir, bunu aşağıdaki gibi tanımlayabiliriz:

<hedef> ::= <kime> [ "," <hedef> ]
<kime> ::= <kanal> | <identd> '@' <sunucu ismi> | <nick> | <mask>
<kanal> ::= ('#' | '&') <karakter dizisi>
<sunucu ismi> ::= <host>
<host> ::= İzin verilen host ismi listesini ayrıntılı olarak görmek için RFC 952'ye bakınız [DNS:4]
<nick> ::= <harf> { <harf> | <sayı> | <özel karakter> }
<mask> ::= ('#' | '$') <karakter dizisi>
<karakter dizisi> ::= <SPACE, BELL, NUL, CR, LF ve virgül (',') dışındaki herhangi bir 8bitlik kod>

Diğer parametre sentaksları:

<kullanıcı> ::= <nonwhite> { <nonwhite> }
<harf> ::= 'a' ... 'z' | 'A' ... 'Z'
<sayı> ::= '0' ... '9'
<özel karakter> ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}'
<nonwhite> ::= <SPACE (0x20), NUL (0x0), CR (0xd), ve LF (0xa) dışındaki herhangi bir 8bitlik kod>

* 2.4 Numerik Cevaplar

Sunucuya gönderilen mesajların hemen hepsi bir tür cevap oluşturur. Bunlardan en yaygın olanı hem cevap hem de hatalar için olan numerik cevaplardır. Numerik cevap gönderen prefix'i, 3 basamaklı bir numerik ve mesajın hedefini içeren tek bir mesaj olarak gönderilir. Numerik cevapların bir kullanıcı tarafından oluşturulmasına izin verilmez, bu şekilde olan mesajlar sunucu tarafından iptal edilir. Diğer durumlarda, bir numerik cevap normal bir mesaj gibidir, sadece anahtar kelimesi bir harf dizisinden değil, 3 basamaklı sayılardan oluşur. Değişik numerik cevapların bir listesi 6. bölümde gösterilmiştir.


3. IRC KAVRAMLARI

Bu kısım IRC protokolündeki asıl düzenlemenin arkasındaki organizmayı ve güncel uygulamaların çeşitli tür mesajları nasıl ilettiğini tanımlamak için ayrılmıştır.


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Sunucular: A, B, C, D, E - Kullanıcılar: 1, 2, 3, 4

[ Şema 2. Küçük bir IRC ağı örneği ]

* 3.1 Birebir İletişim

Birebir iletişim temeli genellikle sadece kullanıcılar tarafından gerçekleştirilir, çünkü hemen hemen tüm sunucu-sunucu trafiği sunucuların sadece kendi aralarında iletişim kurmaları ile oluşmaz. Kullanıcıların birbirleriyle konuşmalarında güvenlik sağlamak ve her kullanıcıya ulaşabilmek için tüm sunucuların ağ sisteminin herhangi bir yönündeki kullanıcıya direkt olarak mesaj gönderebilmeleri gerekmektedir. Gönderilen mesajın yolu, ağ sistemi üzerindeki herhangi iki nokta arasındaki en kısa yoldur.

Aşağıdaki örneklerin her biri şema 2'de gösterilen şekil üzerinden açıklanmaktadır.

Örnek 1:
1 ve 2 numaralı kullanıcılar arasındaki bir mesaj sadece A sunucusu tarafından görülür, A sunucusu mesajı direkt olarak kullanıcı 2'ye gönderir.

Örnek 2:
1 ve 3 numaralı kullanıcılar arasındaki bir mesaj A ve B sunucuları ve kullanıcı 3 tarafından görülür. Diğer kullanıcı ya da sunucular mesajı göremezler.

Örnek 3:
2 ve 4 numaralı kullanıcılar arasındaki bir mesaj sadece A, B, C ve D sunucuları ve kullanıcı 4 tarafından görülür.

* 3.2 Çoklu

IRC'nin ana hedefi etkili ve basit bir görüşme için bir açık oturum sağlamaktır. IRC bunu sağlamak için çeşitli yöntemler içerir, bu yöntemlerin her biri farklı bir amaca hizmet etmektedir.

** 3.2.1 Bir listeye

Çoklu iletişimin en az etkili yolu bir kullanıcıdan bir listeye gönderilen mesajlardır. Bu şu şekilde sağlanır: kullanıcı, mesajının ulaştırılacağı bir hedef listesi belirler ve sunucu da mesajı kopyalayarak listedeki hedeflerin her birine ayrı ayrı iletir. Bu bir grup kullanımında olduğu kadar etkili değildir çünkü hedef listesi bölünür ve gönderilen mesajlar hedeflere çift olarak gönderilip gönderilmediği kontrol edilmeksizin iletilir.

** 3.2.2 Bir gruba (kanala)

IRC'de bir kanal bir çoklu yayın görevi üstlenir, varlıkları değişkendir çünkü sürekli olarak kanallara giriş yapan ve kanallardan çıkış yapan kullanıcılar bulunur. Bir kanalda gerçekleştirilen bir görüşme sadece o kanalda bulunan kullanıcıların bağlı olduğu sunuculara gönderilir. Eğer aynı kanalda bir sunucu üzerinden bağlanmış olan birden fazla kullanıcı bulunuyorsa, mesaj sadece bir kere olmak üzere o sunucuya gönderilir ve daha sonra sunucu tarafından o kanalda bulunan her kullanıcıya tek tek iletilir. Bu işlem daha sonra mesaj kanalın her üyesine iletilene kadar her kullanıcı-sunucu kombinasyonu için uygulanır.

Aşağıdaki örnekler şema 2 üzerinden açıklanmaktadır.

Örnek 4:
İçinde bir kullanıcı bulunan herhangi bir kanalda, kanala gönderilen mesajlar sunucuya gönderilir ve sonra başka bir yere gönderilmez.

Örnek 5:
Bir kanalda 2 kullanıcı vardır. Tüm mesajlar sanki kanaldan bağlantısız olarak iki kullanıcı arasında gönderilen özel mesajlarmış gibi iletilirler.

Örnek 6:
Kullanıcı 1, 2 ve 3 bir kanaldadır. Kanala gönderilen tüm mesajlar tüm kullanıcılara gönderilir ve sadece mesajın iletilmek için geçmesi gereken sunucular mesajı sanki tek bir kullanıcıya gönderilen özel bir mesajmış gibi iletirler. Eğer kullanıcı 1 bir mesaj gönderirse, mesaj kullanıcı 2'ye döner ve daha sonra sunucu B aracılığıyla kullanıcı 3'e iletilir.

** 3.2.3 Bir host/sunucu mask'ine

IRC operatörlerin büyük bir kullanıcı kesimine mesaj gönderebilmesi için host ya da sunucu mask mesajları sağlanmıştır. Bu mesajlar bulunduğu sunucu ya da host'u belirtilen mask'teki host'a veya sunucuya uyan tüm kullanıcılara gönderilir. Mesajlar sadece kullanıcıların bulundukları yerlere gönderilirler, bu bakımdan kanallarla benzerlik gösterirler.

* 3.3 Toplu

Bu mesajlar daha çok çoklu yayın mesajları olarak tanımlanırlar, tüm kullanıcılara ya da sunuculara ya da ikisine birden gönderilirler. Büyük bir sunucu ve kullanıcı ağında, tek bir mesaj ağ üzerinde istenen tüm hedeflere ulaştırılabilmesi için birçok mesaj trafiği yaratır.

Bazı mesajların tüm sunuculara gönderilmesinden başka seçenek yoktur, böylece her sunucu tarafından tutulan durum bilgisi sunucular arasında oldukça tutarlıdır.

** 3.3.1 Kullanıcıdan kullanıcıya (İstemciden istemciye)

Bir kullanıcıdan diğer bir tekil kullanıcıya gönderilen mesajlar için belirlenmiş herhangi bir sınıf yoktur.

** 3.3.2 Kullanıcıdan sunucuya

Kanal üyeliği, kanal modları, kullanıcı durumu vb. durum değişikliği bildiren mesajların büyük çoğunluğu gerçekleştiği sunucu tarafından tüm sunuculara bildirilmelidir, ve bu iletim istemci tarafından değiştirilemez.

** 3.3.3 Sunucudan sunucuya

Sunucular arasındaki mesajların çoğu bütün ''diğer'' sunuculara dağıtılırken, bu sadece bir kullanıcı, kanal ya da sunucuyu etkileyen herhangi bir mesaj için gereklidir. Bunlar IRC'de bulunan temel öğeler oldukları için, bir sunucu tarafından yaratılan neredeyse tüm mesajlar bağlı bulunan diğer tüm sunuculara gönderilir.


4. MESAJ DETAYLARI

İlerleyen sayfalarda IRC sunucusu ve istemci tarafından tanınan her mesajın açıklamalarını yapacağız. Bu bölümde tanımlanan bütün komutlar bu protokolü kullanan tüm sunucular tarafından uygulanmalıdır.

ERR_NOSUCHSERVER hatasının alındığı durumlar <sunucu> parametresinin bulunamadığı anlamına gelir. Sunucu bu cevaptan sonra o komut için başka bir cevap göndermez.

Kullanıcının bağlı bulunduğu sunucunun mesaj bütününü herhangi uygun bir hata vererek bölmesi beklenir. Eğer bir mesaj ayrıştırılırken sunucu kaçınılmaz/ciddi bir hata ile karşılaşırsa, kullanıcıya bir hata mesajı gönderilmeli ve ayrıştırma işlemi sonlandırılmalıdır. Ciddi hata yanlış bir komut, sunucu tarafından tanımlanmamış olan bir hedef (başka bir sunucu, nick ya da kanal bu kategoriye uyar), yetersiz parametre ya da kullanım yetkisinin bulunmaması olarak düşünülebilir.

Eğer bütün bir parametre dizisi kullanıldıysa, parametrelerin her birinin geçerliliği kontrol edilmeli ve uygun cevaplar kullanıcıya gönderilmelidir. Parametreler arasında ayraç olarak virgül kullanılmış olan mesajlarda ise her bir parametre için ayrı cevap gönderilmelidir.

Aşağıdaki örneklerde bazı mesajlar tam formatı kullanmıştır:

:İsim KOMUT parametre liste

Bu gibi örneklerde sunucular arasında geçişte olan''isim''den gönderilen bir mesaj gösterilir, orijinal göndericinin ismini içermesi önemlidir, çünkü uzak sunucu cevabı doğru şekilde gönderebilmek için doğru yola ihtiyaç duyar.

* 4.1 Bağlantı Kaydı

Burada anlatılan komutlar bir sunucu ile bir kullanıcı ya da sunucu olarak bir bağlantı oluşturmak ve bağlantıyı koparmak için kullanılır.

Bir kullanıcı ya da sunucunun bağlantısının tescillenmesi için bir ''PASS'' komutu gerekmez, ama bu sunucu mesajından önce gelmeli ya da NICK/USER kombinasyonundan sonra gelmelidir. Tüm sunucu bağlantılarının bir şifresi olması asıl bağlantılara belli bir güvenlik düzeyinin sağlanması açısından önemle tavsiye edilir. Bir kullanıcının giriş yapmak için izlemesi önerilen yol aşağıdaki gibidir:

1. Pass mesajı
2. Nick mesajı
3. User mesajı

** 4.1.1 Password mesajı

Komut: PASS
Parametreler: <şifre>

Pass komutu bir bağlantı şifresi koymak için kullanılır. Şifre, kurulan bağlantıyı tescilletmek için her seferinde kullanılabilir ve kullanılmalıdır. Şu anda bu durum kullanıcının NICK/USER kombinasyonunun gönderilmesinden önce ve sunucuların da herhangi bir SERVER komutundan önce bir PASS komutu kullanılmasını gerektirir. Şifreler sunucular için C/N satırlarında ve kullanıcılar için I satırlarında bulunanlarla aynı olması gerekmektedir. Kayda geçmeden önce birden fazla PASS komutu gönderilmesi mümkündür ancak sadece en son gönderilen doğrulama için kullanılır ve kayda alındıktan sonra bir daha değiştirilemez. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_ALREADYREGISTRED --> (Zaten kayıtlı)

Örnek:

PASS gizlişifre

** 4.1.2 Nick mesajı

Komut: NICK
Parametreler: <nick> [ <hopcount> ]

NICK mesajı bir kullanıcıya isim vermek ya da önceki ismi değiştirmek için kullanılır. <hopcount> parametresi sadece sunucu tarafından bir nickin ana sunucuya ne kadar uzakta olduğunu belirlemek için kullanılır. Lokal bir bağlantının hopcount değeri 0 (sıfır)'dır. Eğer bir kullanıcı tarafından gönderiliyorsa ignore edilmelidir.

Eğer bir sunucuya daha önceden başka bir kullanıcının almış olduğu bir nick için NICK mesajı ulaşırsa, bir nick collision (nick çatışması) oluşur. Bu çatışmanın sonucu olarak, nick ve bütün emsalleri sunucunun veritabanından kaldırılır ve diğer tüm sunucuların veritabanından da kaldırılması için bir KILL komutu uygulanır. Eğer nick çatışması durumunu yaratan bir nick değiştirme ise, orijinal (eski) nickin de kaldırılması gerekir.

Eğer sunucu direkt olarak bağlantı kurmuş bir kullanıcıdan özdeş bir NICK mesajı alırsa, lokal kullanıcı için ERR_NICKCOLLISION hatası meydana gelebilir, NICK komutu iptal edilir ve herhangi bir kill atılmaz. Numerik cevaplar:

ERR_NONICKNAMEGIVEN --> (Herhangi bir nick belirlenmedi)
ERR_ERRONEUSNICKNAME --> (Hatalı nick)
ERR_NICKNAMEINUSE --> (Nick şu an kullanımda)
ERR_NICKCOLLISION --> (Nick çatışması)

Örnek:

NICK Ekin --> ; Yeni nickin tanıtımı ''Ekin''.
:Ekin NICK Callisto --> ; Ekin nickini Callisto olarak değiştirdi.

** 4.1.3 User mesajı

Komut: USER
Parametreler: <kullanıcı ismi> <host ismi> <sunucu ismi> <realname>

USER mesajı bağlantı kurulurken yeni kullanıcı için bir kullanıcı ismi, host ismi, sunucu ismi ve realname belirlemek için kullanılır. Ayrıca IRC'ye yeni bir kullanıcı girdiğinde sunucular arası iletişimde de kullanılır, çünkü bir kullanıcı ancak hem NICK hem de USER istemciden alındıktan sonra kayıtlı sayılır.

Sunucular arasında USER, kullanıcının nickini prefix (ön ek) olarak almalıdır. Normalde host ismi ve sunucu ismi eğer komut direkt bağlantı kurmuş bir kullanıcıdan geliyorsa IRC ağı tarafından ignore edilir (güvenlik sebebiyle), ama sunucu-sunucu bağlantılarında kullanılırlar. Bu da NICK mesajının yeni bir kullanıcının girdiği her seferde IRC ağının geri kalanına gönderilmesi gerektiği anlamına gelir. (Sonrasında USER mesajı gönderilir)

Realname parametresi son parametre olmalıdır, çünkü realname boşluk karakteri içerebilir ve o şekilde tanınmasının sağlanması için bir kolon (':') prefix'i almalıdır.

Bir kullanıcının kullanıcı ismi hakkında sadece USER mesajına dayanarak yalan söylemesi kolay olduğu için bir Identity Server (Kimlik Sunucusu) kullanılması önerilir. Eğer kullanıcının bağlantı kurduğu host'ta böyle bir sunucu aktifse kullanıcı ismi ''Identity Server''dan alınan cevaba göre oluşturulur. Numerik Cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_ALREADYREGISTRED --> (Zaten kayıtlı)

Örnek:

USER Ekin tolmoon tolsun :Ronnie Reagan --> ; Kullanıcı kendini ''Ekin'' kullanıcı ismi ve ''Ronnie Reagan'' realname'i ile sunucuya tanıtıyor.
:testnick USER Ekin tolmoon tolsun :Ronnie Reagan --> ; USER komutunun ait olduğu nickin bulunduğu sunucular arasında gönderilen mesaj.

** 4.1.4 Server mesajı

Komut: SERVER
Parametreler: <sunucu ismi> <hopcount> <bilgi>

Server mesajı bir sunucuya yeni bir bağlantının diğer ucunda bir sunucu olduğunu bildirmek için kullanılır. Bu mesaj ayrıca sunucu verisini tüm ağa göndermek için de kullanılır. Ağa yeni bir sunucu bağlandığında bu bilgi tüm ağa gönderilir. <hopcount> tüm sunuculara diğer sunucuların ne kadar uzaklıkta olduğu ile ilgili dahili bilgiler vermek için kullanılır. Bütün bir sunucu listesi ile tüm sunucu ağının bir haritasını çıkarmak mümkün olurdu ancak hostmask'ler bunu engeller.

SERVER mesajı sadece (a) henüz kurulmamış ve kurulmaya çalışan bir sunucu bağlantısından ya da (b) var olan başka bir sunucu bağlantısından gelirse kabul edilmelidir, bu durumde SERVER mesajı o sunucunun arkasındaki yeni sunucuyu tanıtır.

SERVER komutu sonucunda alınan hataların hemen hemen hepsi bağlantının hedef sunucu tarafından sonlandırılması ile sonuçlanır. Hata cevapları numerik cevaplar yerine genellikle ''ERROR'' komutu kullanılarak gönderilir çünkü ERROR komutunun bu durumda çeşitli kullanışlı yönleri vardır.

Eğer bir SERVER mesajı ayrışmışsa ve hedef sunucu tarafından hali hazırda tanınmış olan bir sunucuyu tanıtmaya çalışıyorsa, mesajın geldiği bağlantı sonlandırılmalıdır çünkü çift bir geçit oluşur ve IRC ağacının çevrimsiz/düz yapısı bozulur. Numerik cevaplar:

ERR_ALREADYREGISTRED --> (Zaten kayıtlı)

Örnek:

SERVER helper.helpethos.net 1 :[help.helpethos.net] Experimental server --> ; Yeni sunucu helper.helpethos.net kendini tanıtıyor ve giriş yapmaya çalışıyor. Parantez içindeki isim helper.helpethos.net sunucusunu barındıran host'un ismidir.
:help.helpethos.net SERVER irc.helpethos.net 5
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
U Central Server --> ; help.helpethos.net sunucusu 5 hop uzaklıkta bulunan irc.helpethos.net sunucusunun link'idir.

** 4.1.5 Oper

Komut: OPER
Parametreler: <kullanıcı> <şifre>

OPER mesajı normal bir kullanıcının operatör yetkileri alması için kullanılır. <kullanıcı> ve <şifre> kombinasyonu operatör yetkileri kazandırır.

Eğer OPER komutunu gönderen kullanıcı doğru şifreyi girerse, sunucu ağın geri kalanını kullanıcının nicki için ''MODE +o'' kullanarak yeni operatör hakkında bilgilendirir.

OPER mesajı sadece kullanıcı-sunucu şeklindedir. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
RPL_YOUREOPER --> (Operatör oldunuz)
ERR_NOOPERHOST --> (Nickte oper erişimi yok)
ERR_PASSWDMISMATCH --> (Yanlış şifre)

Örnek:

OPER Ekin 123456 --> ; Ekin nickine verilmiş olan oper erişimini 123456 şifresini girerek alıyoruz.

** 4.1.6 Quit

Komut: QUIT
Parametreler: [<çıkış mesajı>]

Bir kullanıcı oturumu çıkış mesajı ile sonlandırılır. Sunucu bir QUIT mesajı gönderen kullanıcı ile olan bağlantısını koparır. Eğer bir ''çıkış mesajı'' belirtilmişse, varsayılan mesaj olan ''kullanıcının nicki'' yerine o mesaj gösterilecektir.

Netsplit (iki sunucu arasındaki bağlantının kopması) durumunda çıkış mesajı her iki sunucunun ismini bir boşluk ile ayırmak suretiyle içerir. Baştaki sunucu hala bağlı bulunulan, sondaki sunucu ise bağlantının sonlandırılmış olduğu sunucudur.

Eğer, başka bir sebeple, kullanıcının bağlantısı QUIT komutu kullanılmaksızın kopmuşsa (örneğin istemci düşer ve soket üzerinde EOF (End Of File (Dosya sonu)) durumu oluşur), sunucu çıkış mesajı kısmını bağlantının kopmasına sebep olan durumu belirten bir mesaj ile doldurur. Numerik cevabı yoktur.

Örnek:

QUIT İyi geceler. --> ; Tercih edilmiş mesaj formatı.

** 4.1.7 Server quit mesajı

Komut: SQUIT
Parametreler: <sunucu> <yorum>

SQUIT mesajı çıkış yapan ya da bağlantısı kopan sunucular hakkında bilgi vermek için kullanılır. Eğer bir sunucu başka bir sunucu ile bağlantısını koparmak isterse diğer sunucuya bir SQUIT mesajı göndermelidir, bu mesajda bağlantının koparılacağı sunucu ismi sunucu parametresi olarak kullanılır, daha sonra çıkış yapan sunucu ile bağlantı kesilir.

Bu komut ayrıca operatörlerin bir IRC ağının düzenini sağlaması ve koruması konusunda da yardımcıdır. Operatörler de bir uzak sunucu bağlantısı için SQUIT mesajı oluşturabilirler. Bu durumda, SQUIT mesajı operatör ile uzak sunucu arasındaki her bir sunucu tarafından ayrıştırılmalı ve aşağıda açıklandığı gibi her sunucu tarafından tutulan ağ görüntüsü güncellenmelidir.

<yorum> kısmı bir uzak sunucu (bağlı bulundukları sunucuya bağlı olmayan bir sunucu) için SQUIT komutu kullanan tüm operatörler tarafından kullanılmalı ve böylece diğer operatörler işlemin sebebi ile ilgili bilgi sahibi olmalıdır. <yorum> kısmı aynı zamanda sunucular tarafından bir hata ya da hata benzeri mesaj ile de doldurulabilir.

Koparılan bir bağlantının herhangi bir ucunda bulunan iki sunucu diğer sunuculara bir SQUIT mesajı göndererek link'li bulunan tüm sunuculara bilgi verir.

Benzer olarak, ağa bağlı bulunan diğer tüm sunuculara bağlantısı kopan link'teki tüm kullanıcılar ile ilgili QUIT mesajı da gönderilir. Buna ek olarak, bir split sonucu bir üye kaybeden bir kanaldaki tüm kullanıcılara da o üye ile ilgili QUIT mesajı gönderilir.

Eğer bir sunucu bağlantısı istenmeyen bir şekilde sonlanırsa, bu kopuşu tespit eden sunucu ağın geri kalanını bu bağlantının kopuşu ve <yorum> kısmında kopuş sebebi ile ilgili bilgilendirir. Numerik cevaplar:

ERR_NOPRIVILEGES --> (Bu komutu kullanma yetkiniz yok)
ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)

Örnek:

SQUIT hack.helpethos.net :Kötü Link ? --> ; hack.helpethos.net link'inin bağlantısı ''Kötü Link'' hatası yüzünden sonlanmıştır.
:Ekin SQUIT help.helpethos.net :Server out of control --> ; Ekin nicki ''help.helpethos.net'' link'ini ağdan çıkarmıştır çünkü sunucu kontrolden çıkmıştır.

* 4.2 Kanal İşlemleri

Bu grup mesajlar kanalların yönetimi, kanal modları ve kullanıcıları ile alakalıdır. Bunlar uygulanırken, ağın karşılıklı taraflarında bulunan iki kullanıcı komutlar gönderdiğinde ve bunlar birbiri ile çatıştığında kaçınılmaz durumlar oluşabilir. Ayrıca bir <nick> parametresi kullanıldığında sunucunun geçmiş kayıtları kontrol edip yakında değişiklik olup olmadığını görebilmesi için sunucuların bir nick geçmişi tutması gerekir.

** 4.2.1 Join mesajı

Komut: JOIN
Parametreler: <kanal>{,<kanal>} [<şifre>{,<şifre>}]

JOIN komutu bir kullanıcı tarafından bir kanala girmek için kullanılır. Kullanıcının kanala girme izni olup olmadığı kullanıcının bağlandığı sunucu tarafından kontrol edilir; diğer bütün sunucular mesajı alınca kullanıcıyı otomatik olarak kanala eklerler. Bu durumu etkileyebilen durumlar aşağıdaki gibidir:

1. Eğer kanal davetsel moda alınmışsa kullanıcı davet edilmelidir.
2. Kullanıcının nick/identd/host'u herhangi bir aktif ban ile eşleşmemelidir.
3. Eğer şifre konmuşsa, doğru şifre girilmelidir.

Bunlar MODE konusu altında ayrıntılı olarak anlatılacaktır. (Ayrıntılar için bölüm 4.2.3'e bakınız)

Bir kullanıcı kanala girdiğinde, kanalı etkileyen her komut ile ilgili notice mesajı alır. Bunlar MODE, KICK, PART, QUIT ve tabii ki PRIVMSG/NOTICE mesajlarını içerir. Tüm sunucuların kullanıcının nerede olduğunu ve o kanalda kimlerin olduğunu bilebilmesi için JOIN komutunun tüm sunuculara dağıtılması gerekir. Bu durum PRIVMSG/NOTICE mesajlarının kanala en uygun biçimde iletilmesini sağlar.

Eğer bir JOIN işlemi başarılı olursa, kullanıcıya kanalın başlığı (RPL_TOPIC kullanılarak) ve kanalda bulunan kullanıcıların listesi (RPL_NAMREPLY kullanılarak) gönderilir, bu liste kullanıcının kendi nickini de içerir. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_BANNEDFROMCHAN --> (Kanalda banlısınız)
ERR_INVITEONLYCHAN --> (Sadece davet edilenler girebilir)
ERR_BADCHANNELKEY --> (Kanal şifresi yanlış girildi)
ERR_CHANNELISFULL --> (Kanalın kullanıcı limiti dolu)
ERR_BADCHANMASK --> (Kanal ismi yanlış girildi)
ERR_NOSUCHCHANNEL --> (Böyle bir kanal bulunmuyor)
ERR_TOOMANYCHANNELS --> (Çok fazla kanalda bulunuyorsunuz)
RPL_TOPIC --> (Başlık mesajı verilir)

Örnekler:

JOIN #helpethos --> ; #helpethos kanalına giriş.
JOIN #helpethos helpkültür --> ; Şifresi helpkültür olan #helpethos kanalına giriş.
JOIN #helpethos,&helpquery helpkültür --> ; Şifresi helpkültür olan #helpethos kanalına ve şifresi bulunmayan &helpquery kanalına aynı anda giriş.
JOIN #helpethos,#help supreme,ethos --> ; Şifresi supreme olan #helpethos kanalına ve şifresi ethos olan #help kanalına aynı anda giriş.
JOIN #helpethos,#helpquery --> ; #helpethos ve #helpquery kanallarına aynı anda giriş.
:Ekin JOIN #helpethos --> ; Ekin nickinin #helpethos kanalına giriş mesajı.

** 4.2.2 Part mesajı

Komut: PART
Parametreler: <kanal>{,<kanal>}

PART mesajı, mesajı gönderen kullanıcının mesajda belirtilen kanal veya kanallardan ayrılmasını ve listelerinden çıkartılmasını sağlar. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_NOSUCHCHANNEL --> (Böyle bir kanal bulunmuyor)
ERR_NOTONCHANNEL --> (Kanalda değilsiniz)

Örnekler:

PART #helpethos --> ; #helpethos kanalından çıkış.
PART #helpethos,&helpquery --> ; #helpethos ve &helpquery kanallarından aynı anda çıkış.

** 4.2.3 Mode mesajı

Komut: MODE

MODE komutu çift amaçlı bir komuttur. Hem nicklerin hem de kanalların modlarının değiştirilmesi için kullanılır. Bu seçimin gerekçesi ise bir gün nicklerin kullanılmaz olacağı ve bunların yerine kanalların kullanılacağıdır.

MODE mesajları ayrıştırılırken, öncelikle tüm mesajın, sonra ortaya çıkan değişikliklerin ayrıştırılması ve iletilmesi önerilir.

*** 4.2.3.1 Kanal modları

Parametreler: <kanal> {[+|-]|o|p|s|i|t|n|b|v} [<limit>] [<nick>] [<banmask>]

MODE komutu operatörlerin kanal özelliklerini değiştirebilmesi için sağlanmıştır. Ayrıca kanal operatörlerinin operatör yetkisi alabilmesi için sunucu da mode değiştirebilir.

Çeşitli kanal modları aşağıdaki gibidir:

o - operatör yetkisi verme/alma;
p - özel kanal;
s - gizli kanal;
i - davetsel moddaki kanal;
t - sadece operatörlerin başlık değiştirebildiği kanal;
n - kanalda bulunmayanların mesaj gönderemediği kanal;
m - sadece operatörlerin konuşabildiği kanal;
l - kanala limit koyma/limit konmuş kanal;
b - bir mask'i ban'lama/ban'ı kaldırma;
v - +m moddaki kanalda bir kullanıcıya konuşma izni (voice) verme/alma;
k - kanala şifre koyma/kaldırma/şifre konmuş kanal.

'o' ve 'b' seçenekleri kullanılırken, her komutta toplamda 3 mode kullanılabilir. Yani en fazla 3 adet olmak üzere 'o' ve 'b' kombinasyonları yapılabilir.

*** 4.2.3.2 Nick modları

Nick modları kullanıcının diğer kullanıcılar tarafından nasıl göründüğü ya da kullanıcıya extra olarak hangi mesajların gönderildiği gibi durumlarda değişiklik yaratır. Bir nick MODE komutu sadece komutu gönderen kişinin nicki komutta parametre olarak belirtilen nick ile aynı ise işlem görür.

Çeşitli nick modları aşağıdaki gibidir:

i - görünmez kullanıcı modu;
s - sunucu mesajlarını alabilen kullanıcı modu;
w - wallops mesajlarını alabilen kullanıcı modu;
o - operatör flag'i.

Ek modlar daha sonra kullanılır olacaktır.

Eğer bir kullanıcı kendisine +o modu vererek operatör statüsüne geçmeye çalışırsa, komut ignore edilecektir. Ancak kendini deop etmesi (-o kullanarak) mümkündür. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
RPL_CHANNELMODEIS --> (Kanal modları hakkında bilgi)
ERR_CHANOPRIVSNEEDED --> (Kanal operatörü değilsiniz)
ERR_NOSUCHNICK --> (Böyle bir nick bulunmuyor)
ERR_NOTONCHANNEL --> (Kanalda değilsiniz)
ERR_KEYSET --> (Kanalda zaten bir şifre var)
RPL_BANLIST --> (Ban listesi)
RPL_ENDOFBANLIST --> (Ban listesinin sonu)
ERR_UNKNOWNMODE --> (Bilinmeyen mode)
ERR_NOSUCHCHANNEL --> (Böyle bir kanal bulunmuyor)
ERR_USERSDONTMATCH --> (Nick uyuşmazlığı)
RPL_UMODEIS --> (Nick modları hakkında bilgi(own))
ERR_UMODEUNKNOWNFLAG --> (Bilinmeyen nick modu)

Örnekler:

Kanal modlarının kullanımı:

MODE #helpethos +im --> ; #helpethos kanalında sadece operatörler konuşabilir ve kanal davetsel moda alınır.
MODE #helpethos +o Ekin --> ; #helpethos kanalında Ekin nickine kanal operatörlüğü verilir.
MODE #helpethos +v Ekin --> ; #helpethos kanalında Ekin nickine konuşma izni (voice) verilir.
MODE #helpethos -s --> ; #helpethos kanalı gizli moddan çıkartılır.
MODe #helpethos +k helpkültür --> ; #helpethos kanalına ''helpkültür'' şifresi konulur.
MODE #helpethos +l 10 --> ; #helpethos kanalına 10 kişilik limit konur.
MODE &helpethos +b --> ; &helpethos kanalındaki banlar listelenir.
MODE &helpethos +b *!*@* --> ; Bütün kullanıcıların kanala girişi engellenir.
MODE &helpethos *!*@*.net --> ; *.net host'unu taşıyan bütün kullanıcıların kanala girmesi engellenir.

Nick modlarının kullanımı:

MODE Scheat -w --> ; Scheat nicki artık wallops mesajlarını almayacaktır.
:Scheat MODE Scheat +i --> ; Scheat nickinin +i modu almak için gönderdiği mesaj.
MODE Ekin -o --> ; Ekin operatör durumundan çıkış yapıyor. Komutun (''MODE Ekin +o'') şeklinde kullanımına izin verilmemelidir çünkü bu durum OPER komutunun yetkilerini aşar.

** 4.2.4 Topic mesajı

Komut: TOPIC
Parametreler: <kanal> [<başlık>]

TOPIC mesajı bir kanalın başlığını değiştirmek ya da görmek için kullanılır. Eğer <başlık> parametresi kullanılmazsa kanalın başlığı görülür, kullanılırsa başlık değiştirilir (kanal modları değiştirilmesine izin veriyor ise). Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_NOTONCHANNEL --> (Kanalda değilsiniz)
RPL_NOTOPIC --> (Kanalda başlık yoktur)
RPL_TOPIC --> (Başlık mesajı verilir)
ERR_CHANOPRIVSNEEDED --> (Kanal operatörü değilsiniz)

Örnekler:

:Scheat TOPIC #helpethos Hoşgeldiniz. --> ; Scheat kullanıcısı #helpethos kanalına ''Hoşgeldiniz.'' başlığı koyuyor.
TOPIC #helpethos IRC.HelpEthos.Net --> ; #helpethos kanalına başlık konur.
TOPIC #helpethos --> ; #helpethos kanalının başlığı görülür.

** 4.2.5 Names mesajı

Komut: NAMES
Parametreler: [<kanal>{,<kanal>}]

NAMES komutunu kullanarak, kullanıcı görebildiği herhangi bir kanaldaki kendisine görünür olan tüm kullanıcıları listeleyebilir. Görülebilen kanal isimleri özel olmayan (+p) ya da gizli olmayan (+s) kanallar ya da içinde bulundukları kanallardır. <kanal> parametresi eğer geçerli ise bilgi dönüşü sağlayacak kanalları temsil eder. Geçersiz kanal isimleri için herhangi bir hata cevabı yoktur.

Eğer bir <kanal> parametresi verilmezse, tüm kanalların bir listesi ve kanalda bulunanların listesi alınır. Bu listenin sonunda hiçbir kanalda bulunmayan ya da görünür bir kanalda bulunmayan kullanıcılar *"* kanalında olarak görülürler. Numerik cevaplar:

RPL_NAMREPLY --> (Names listesi)
RPL_ENDOFNAMES --> (Names listesi sonu)

Örnekler:

NAMES #helpethos,#helpquery --> ; #helpethos ve #helpquery kanalları eğer bize görünür durumda ise, kanallardaki görünür kullanıcıları listeler.
NAMES --> ; Görünür tüm kanal ve kullanıcıları listeler.

** 4.2.6 List mesajı

Komut: LIST
Parametreler: [<kanal>{,<kanal>} [<sunucu>]]

List mesajı kanalları ve başlıklarını listelemek için kullanılır. Eğer <kanal> parametresi kullanılırsa sadece o kanal listelenir. Eğer komutu kullanan kullanıcı o kanallarda değilse, özel kanallar (başlıkları olmaksızın) "Prv" şeklinde gösterilirler. Benzer olarak, aynı durumda gizli kanallar hiç listelenmezler. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_LISTSTART --> (Liste başlangıcı)
RPL_LIST --> (List cevabı)
RPL_LISTEND --> (Liste sonu)

Örnekler:

LIST --> ; Tüm kanalları listeler.
LIST #helpethos,#helpquery --> ; #helpethos ve #helpquery kanallarını listeler.

** 4.2.7 Invite mesajı

Komut: INVITE
Parametreler: <nick> <kanal>

INVITE mesajı kullanıcıları kanala davet etmek için kullanılır. <nick> parametresi hedef kanala (<kanal>) davet edilecek kullanıcının nickidir. Kullanıcının davet edileceği kanalın geçerli bir kanal olması veya var olması gibi bir zorunluluk yoktur. Kullanıcıyı davetsel modda (+i) bir kanala davet etmek için, davet edecek olan kullanıcının kanal operatörü olması gerekir. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_NOSUCHNICK --> (Böyle bir nick bulunmuyor)
ERR_NOTONCHANNEL --> (Kanalda değilsiniz)
ERR_USERONCHANNEL --> (Kullanıcı kanalda)
ERR_CHANOPRIVSNEEDED --> (Kanal operatörü değilsiniz)
RPL_INVITING --> (Kullanıcı başarıyla davet ediliyor)
RPL_AWAY --> (Kullanıcı meşgul durumda)

Örnekler:

:Ekin INVITE Scheat #helpethos --> ; Ekin kullanıcısı Scheat kullanıcısını #helpethos kanalına davet ediyor.
INVITE Ekin #helpethos --> ; Ekin nickini #helpethos kanalına davet etmek için kullanılan komut.

** 4.2.8 Kick komutu

Komut: KICK
Parametreler: <kanal> <kullanıcı> [<sebep>]

KICK komutu bir kullanıcı kanaldan zorla çıkarmak için kullanılır. KICK komutu kullanıcıyı kanaldan ''atar'' (zorunlu PART). Sadece kanal operatörleri kullanıcılara KICK atabilir. KICK komutunun hedefi olan kullanıcı kanaldan atılmadan önce, her sunucu komutu kullanan kişinin kanal operatörü olup olmadığını kontrol eden bir KICK mesajı alır. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_NOSUCHCHANNEL --> (Böyle bir kanal bulunmuyor)
ERR_BADCHANMASK --> (Kanal ismi yanlış girildi)
ERR_CHANOPRIVSNEEDED --> (Kanal operatörü değilsiniz)
ERR_NOTONCHANNEL --> (Kanalda değilsiniz)

Örnekler:

KICK &helpethos Scheat --> ; Scheat &helpethos kanalından atılır.
KICK #helpethos Ekin :Kötü nick --> ; Ekin #helpethos kanalından kötü nick olduğu gerekçesi ile atılır.
:Ekin KICK #helpethos Scheat --> ; Ekin nickinin Scheat nickine #helpethos kanalında uyguladığı KICK komutu mesajı.

Not:

KICK komutunun parametrelerini aşağıdaki şekilde genişletmek mümkündür:

<kanal>{,<kanal>} <kullanıcı>{,<kullanıcı>} [<sebep>]

* 4.3 Sunucu Sorgu ve Komutları

Sunucu sorgu komutları ağa bağlı olan herhangi bir sunucu ile ilgili bilgi almak için oluşturulmuştur. Ağa bağlı olan tüm sunucular bu komutlara doğru biçimde cevap vermek zorundadır. Geçersiz bir cevap ya da cevabın yokluğu ilgili sunucuda sorun olduğu şeklinde algılanır ve sorun mümkün olan en kısa zamanda çözülene kadar o sunucunun bağlantısı koparılır/engellenir.

Bu sorgularda parametre <sunucu> olarak görülür, ama bu bir nick, sunucu ya da wildcard kullanılmış bir mask de olabilir. Ancak her parametre için sadece bir adet sorgu ve cevap oluşturulur.

** 4.3.1 Version mesajı

Komut: VERSION
Parametreler: [<sunucu>]

VERSION mesajı sunucunun program versiyonunu sorgulamak için kullanılır. Opsiyonel olarak kullanılan <sunucu> parametresi, kullanıcının direkt olarak bağlı olmadığı bir sunucunun versiyonunu sorgulamasına olanak sağlar. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_VERSION --> (Versiyon verileri)

Örnekler:

:Ekin VERSION *.HelpEthos.Net --> ; Ekin nickinin ağdaki *.HelpEthos.Net uzantısı ile biten bir sunucunun versiyonunu sorgulama mesajı.
VERSION HelpEthos.Net --> ; HelpEthos.Net sunucusunun versiyonunu sorgulamak için kullanılan komut.

** 4.3.2 Stats mesajı

Komut: STATS
Parametreler: [<sorgu> [<sunucu>]]

Stats mesajı bir sunucunun istatistiklerini sorgulamak için kullanılır. Eğer <sunucu> parametresi kullanılmazsa, sadece "end of stats" cevabı geri gönderilir. Bu komutun kullanımı cevabı veren sunucu ile yüksek derecede bağlantılıdır, ancak sunucu aşağıda belirtilen sorgular ya da benzeri sorgulara cevap verebilmelidir.

(Eğer <sunucu> parametresi kullanılmışsa) Hedef sunucu üzerinde herhangi tek bir harf belirtilerek sorgu yapılabilir, aksi takdirde aracı sunucular tarafından değiştirilmeden ve dikkate alınmadan aktarılır. Aşağıdaki sorgular güncel IRC kullanımında mevcuttur ve sunucunun kurulum bilgilerinin birçoğunu verirler. Farklı versiyonlar tarafından aynı şekilde desteklenmiyor olabilse de, tüm sunucuların güncel olarak kullanılan cevap formatlarına ve sorgu amacına uygun olan her STATS sorgusuna geçerli bir cevap verebilmesi gerekir.

Güncel olarak desteklenen sorgular aşağıdaki gibidir:

c - Sunucunun bağlanabileceği ya da kendisine bağlanmasına izin verdiği sunucuların listesini verir.

h - Leaf olarak muamele görmeye zorlanan ya da hub olarak işlev görmesine izin verilen sunucuların listesini verir.

i - Sunucunun bir kullanıcının sunucuya bağlanmak için sahip olması gereken izin verilmiş host'ların listesini verir.

k - Sunucudaki yasaklanmış kullanıcı ismi/host ismi kombinasyonlarının listesini verir.

l - Sunucunun bağlantılarının bağlantı sürelerini ve aktarılan veri miktarlarını da içeren bir listesini verir.

m - Sunucu tarafından desteklenen komutların ve bu komutların kaçar defa kullanıldığının bir listesini verir. (kullanım miktari 0 olanlar gösterilmez.)

o - Normal kullanıcıların operatör erişimi alabileceği host'ların listesini verir. (Eklenmiş olan oper hesapları ve flag'leri listelenir.)

y - Y-lines (sınıf) sunucu konfigürasyon dosyalarının sınıfsal özelliklerinin listesini verir.

u- Sunucunun aktif olduğu süreyi verir.

Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_STATSCLINE --> (c sorgusu cevabı)
RPL_STATSNLINE --> (n sorgusu cevabı)
RPL_STATSILINE --> (i sorgusu cevabı)
RPL_STATSKLINE --> (k sorgusu cevabı)
RPL_STATSQLINE --> (q sorgusu cevabı)
RPL_STATSLLINE --> (l sorgusu cevabı)
RPL_STATSLINKINFO -->
RPL_STATSUPTIME
RPL_STATSCOMMANDS
RPL_STATSOLINE --> (o sorgusu cevabı)
RPL_STATSHLINE --> (h sorgusu cevabı)
RPL_ENDOFSTATS --> (Stats komutu cevabı sonu)

Örnekler:

STATS m --> ; Bağlı bulunan sunucudaki komut kullanım istatistiği listelenir.
:Ekin STATS c HelpEthos.Net --> ; Ekin kullanıcısının HelpEthos.Net sunucusunun C/N line bilgisini görmek için yaptığı STATS sorgusu.

** 4.3.3 Links mesajı

Komut: LINKS
Parametreler: [[<uzak sunucu>] <sunucu mask'i>]

LINKS ile kullanıcı sorguya cevap veren sunucuların tanıdığı tüm sunucuların bir listesini alır. Eğer mask kullanılmışsa listelenen sunucular mask ile uyuşuyor olmalıdır, kullanılmıyorsa listenin tamamı verilir.

Eğer <uzak sunucu>'ya ek olarak bir <sunucu mask'i> verilmişse, LINKS komutu mask'e uyan (eğer varsa) ilk sunucuya gönderilir ve o sunucunun sorguya cevap vermesi istenir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_LINKS --> (Links mesajı cevabı)
RPL_ENDOFLINKS --> (Links mesajı sonu)

Örnekler:

LINKS *.HelpEthos.Net --> ; *.HelpEthos.Net mask'ine uyan tüm sunucular listelenir.
:Ekin LINKS *.HelpEthos.Net --> ; Ekin kullanıcısının *.HelpEthos.Net mask'ine uyan tüm sunucuları listelemek için kullandığı LINKS sorgusu.

** 4.3.4 Time mesajı

Komut: TIME
Parametreler: [<sunucu>]

Time mesajı, belirlenmiş sunucunun lokal zamanını sorgulamak için kullanılır. Eğer sunucu parametresi kullanılmazsa, komutun uygulandığı sunucu sorguya cevap verir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_TIME --> (Time mesajı cevabı)

Örnekler:

TIME HelpEthos.Net --> ; HelpEthos.Net sunucusunda zaman sorgusu yapılır.
Ekin TIME *.HelpEthos.Net --> ; Ekin kullanıcısının *.HelpEthos.Net mask'ine uyan sunucular için yaptığı TIME sorgusu.

** 4.3.5 Connect mesajı

Komut: CONNECT
Parametreler: <hedef sunucu> [<port> [<uzak sunucu>]]

CONNECT komutu bir sunucuyu başka bir sunucu ile bağlantı kurmaya zorlamak için kullanılabilir. CONNECT kısıtlanmış bir komuttur ve sadece IRC operatörler tarafından kullanılabilir. Eğer bir uzak sunucu belirtilmişse, CONNECT teşebbüsü o sunucu tarafından <hedef sunucu> ve <port> için gerçekleştirilir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
ERR_NOPRIVILEGES --> (Bu komutu kullanma yetkiniz yok)
ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)

Örnekler:

CONNECT IRC.HelpEthos.Net --> ; IRC.HelpEthos.Net sunucusuna bağlanmak için kullanılan komut.
:Ekin CONNECT HelpEthos.Net 6668 TRSohbet.Com --> ; HelpEthos.Net sunucusunun TRSohbet.Com sunucusuna 6668 portundan bağlanması için Ekin kullanıcısı tarafından kullanılan komut.

** 4.3.6 Trace mesajı

Komut: TRACE
Parametreler: [<sunucu>]

TRACE komutu belirli bir sunucu için güzergah bulmak için kullanılır. Bu mesajı üreten her sunucu, komutu gönderene bunun bir geçiş link'i olduğu bilgisini işaret eden bir cevap göndermek zorundadır, bu cevaplar "traceroute" kullanımı sonucu alınmış bir cevap zincirini oluşturur. Bu cevap gönderildikten sonra, sunucu mesajı diğer sunucuya ulaştığı kesinleşene kadar takip eder. Eğer <sunucu> parametresi kullanılmamışsa, TRACE komutunun kullanıcıya mevcut sunucunun hangi sunucular ile direkt bağlantısı olduğunu söyleyen bir cevap göndermesi önerilir.

Eğer <sunucu> parametresi ile belirlenmiş hedef gerçek bir sunucu ise, hedef sunucunun tüm sunucuları ve onlara bağlı olan kullanıcıları vermesi beklenir, ancak sadece operatörler kullanıcıları görebilir. Eğer parametre bir nick ise sadece o nick için cevap verilir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)

Eğer TRACE mesajı başka bir sunucu için kullanılmışsa, aradaki bütün sunucular komutun içinden geçtiğini ve gideceği bir sonraki hedefi belirten bir RPL_TRACELINK cevabı vermelidir.

RPL_TRACELINK

Bir TRACE cevabı aşağıdaki numerik cevapların herhangi birinden ya da birden fazlasından oluşabilir:

RPL_TRACECONNECTING
RPL_TRACEHANDSHAKE
RPL_TRACEUNKNOWN
RPL_TRACEOPERATOR
RPL_TRACEUSER
RPL_TRACESERVER
RPL_TRACESERVICE
RPL_TRACENEWTYPE
RPL_TRACECLASS

Örnekler:

TRACE *.HelpEthos.Net --> ; *.HelpEthos.Net mask'ine uyan sunucular için uygulanan TRACE.
:Ekin TRACE Scheat --> ; Ekin kullanıcısı tarafından Scheat kullanıcısına uygulanan TRACE.

** 4.3.7 Admin komutu

Komut: ADMIN
Parametreler: [<sunucu>]

Admin mesajı belirtilen sunucunun admininin ismini öğrenmek için kullanılır. Eğer <sunucu> parametresi kullanılmazsa, komut bulunulan sunucu için geçerli olur. Her sunucunun ADMIN mesajlarını diğer sunuculara gönderebilmesi gerekir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_ADMINME --> (Admin komutu cevabı başlangıcı)
RPL_ADMINLOC1 --> (Sunucunun ülke, eyalet, şehir bilgi cevabı)
RPL_ADMINLOC2 --> (Sunucunun üniversite bilgi cevabı)
RPL_ADMINEMAIL --> (Sunucunun email bilgi cevabı)

Örnekler:

ADMIN IRC.HelpEthos.Net --> ; IRC.HelpEthos.Net sunucusu için yapılan ADMIN sorgusu.
:Ekin ADMIN *.HelpEthos.Net --> ; Ekin kullanıcının *.HelpEthos.Net mask'ine uyan sunucular için yaptığı ADMIN sorgusu.

** 4.3.8 Info komutu

Komut: INFO
Parametreler: [<sunucu>]

INFO komutunun, sunucunun ne zaman düzenlendiği, versiyonu, yama seviyesi, ne zaman başlatıldığı ve çeşitli diğer tanımlayıcı bilgileri vermesi beklenir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_INFO --> (Info komutu cevabı)
RPL_ENDOFINFO --> (Info komutu cevabı sonu)

Örnekler:

INFO IRC.HelpEthos.Net --> ; IRC.HelpEthos.Net sunucusunun bilgilerini almak için kullanılan komut.
:Ekin INFO *.HelpEthos.Net --> ; Ekin kullanıcısının *.HelpEthos.Net mask'ine uyan ilk sunucunun bilgilerini almak için gönderdiği INFO sorgusu.
INFO Ekin --> ; Ekin kullanıcısının bağlı olduğu sunucunun bilgilerini almak için kullanılan komut.

* 4.4 Mesaj Gönderme

IRC protokolünün ana amacı kullanıcılar için birbirleri ile iletişim kurabilecekleri bir platform sağlamaktır. PRIVMSG ve NOTICE bir kullanıcıdan diğerine mesaj iletimi gerçekleştirmek için mevcut tek yöntemlerdir, diğerleri sadece bunu mümkün kılar ve düzgün ve güvenilir biçimde çalışmasını garanti etmeyi dener.

** 4.4.1 Private mesajlar

Komut: PRIVMSG
Parametreler: <alıcı>{,<alıcı>} <gönderilecek metin>

PRIVMSG komutu kullanıcılar arasında özel mesaj göndermek için kullanılır. <alıcı> mesajın gönderildiği kişinin nickidir. <alıcı> aynı zamanda birbirinden virgüllerle ayrılmış birden fazla nickten oluşan bir liste veya bir kanal olabilir.

<alıcı> parametresi aynı zamanda bir host mask (#mask) ya da sunucu mask'i ($mask) olabilir. Her iki durumda da sunucu mesajları o mask'e uyan sunucuda olan ya da o mask'e uyan host'a sahip olan kullanıcılara gönderecektir. Mask'te en az bir adet "." olmalıdır ve son "." karakterinden sonra hiçbir wildcard kullanılmamalıdır. Bu kısıtlama kullanıcıların "#*" ya da "$*" mask'lerine mesaj göndermelerini engellemek için konmuştur çünkü tersi olursa mesaj tüm kullanıcılara gönderilecektir ve bu durum gerektiği gibi kullanılmamış ve istismar edilmiştir. Wildcardlar (joker karakterler) "?" ve "*" karakterleridir. PRIVMSG komutunun bu uzantısı sadece IRC operatörler tarafından kullanılabilir. Numerik cevaplar:

ERR_NORECIPIENT --> (Alıcı belirtilmedi)
ERR_NOTEXTTOSEND --> (Herhangi bir metin yok)
ERR_CANNOTSENDTOCHAN --> (Kanal gönderilmedi/yetki yok)
ERR_NOTOPLEVEL --> (Çok genel bir mask kullanıldı) (örn: *.eu yerine *)
ERR_WILDTOPLEVEL --> (Domain uzantısı yerine wildcard kullanıldı) (Sonda wildcard, örn: *.*)
ERR_TOOMANYTARGETS --> (Çok fazla hedef)
ERR_NOSUCHNICK --> (Böyle bir nick bulunmuyor)
RPL_AWAY --> (Kullanıcı meşgul durumda)

Örnekler:

:Ekin PRIVMSG Scheat :Merhaba --> ; Ekin'den Scheat'e gönderilen mesaj.
PRIVMSG Ekin :Nasılsın? --> ; Ekin'e mesaj gönderen komut.
PRIVMSG Ekin@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...].Net --> ; HelpEthos.Net sunucusunda bulunan Ekin nickine mesaj gönderen komut.
PRIVMSG $*.Net :Sunucu yeniden başlatılacak. --> ; *.Net mask'i ile eşleşen tüm sunucularda bulunan kullanıcılara gönderilen mesaj.
PRIVMSG #.*Net :İyi sohbetler dileriz. --> ; *.Net mask'i ile eşleşen bir host'tan bağlanan tüm kullanıcılara gönderilen mesaj.

** 4.4.2 Notice

Komut: NOTICE
Parametreler: <nick> <metin>

NOTICE mesajı PRIVMSG ile benzer olarak kullanılır. Aralarındaki fark, notice mesajlarına karşılık olarak asla otomatik cevap gönderilmemesidir. Bu kural sunucular için de geçerlidir, onlar da bir notice alındığında kullanıcıya hata mesajı göndermezler. Bu kuralın amacı alınan bir şeye karşılık olarak otomatik cevap gönderen bir istemci ile bir döngü oluşmasının engellenmesidir. Bu durum automaton (botlar) tarafından diğer bir bot ile herhangi bir döngüye düşmemek için sıkça kullanılır.

Cevaplar ile ilgili detaylı bilgi ve örnekler için PRIVMSG bölümüne bakınız.

* 4.5 Kullanıcı Tabanlı Sorgular

Kullanıcı sorguları bir kullanıcı ya da kullanıcı grubu ile ilgili ayrıntılı bilgi almak için kullanılan bir takım komutlardır. Bu komutlardan herhangi biri ile wildcard karakter kullanıldığında, eğer eşleşiyorlarsa, sadece bize görünür olan kullanıcıların bilgileri alınacaktır. Kullanıcıların görünürlüğü kullanıcı modları ile kullanıcıların bulunduğu ortak kanalların kombinasyonu ile belirlenir.

** 4.5.1 Who sorgusu

Komut: WHO
Parametreler: [<isim> [<o>]]

WHO mesajı bir kullanıcı tarafından <isim> parametresi ile eşleşen bir bilgi listesi almak için kullanılır. <isim> parametresinin kullanılmadığı durumlarda, tüm görünür (sorguyu gerçekleştiren kullanıcı ile ortak bir kanalı bulunmayan ve nick modları arasında +i bulunmayan) kullanıcılar listelenecektir. Aynı sonuç <isim> parametresi yerine ''0'' veya tüm kullanıcıları kapsayacak bir wildcard kullanılarak da alınır.

<isim> parametresi eğer kanal ismi bulunamazsa kullanıcının nicki, host'u, identd'i, sunucusu ya da realname'i ile eşleştirilebilir.

Eğer ''o'' parametresi kullanılırsa, sadece mask ile eşleşen operatörler listelenir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_WHOREPLY --> (Who sorgusu cevabı)
RPL_ENDOFWHO --> (Who sorgusu cevabı sonu)

Örnekler:

WHO *.he --> ; "*.he" mask'i ile eşleşen tüm kullanıcıları listeler.
WHO Ekin* o --> ; "Ekin*" mask'i ile eşleşen tüm operatörleri listeler.

** 4.5.2 Whois sorgusu

Komut: WHOIS
Parametreler: [<sunucu>] <nickmask>[,<nickmask>[,...]]

WHOIS mesajı belirli bir kullanıcı ile ilgili bilgi almak için kullanılır. Sunucu bu sorguyu sorgudaki nickmask'ler ile eşleşen kullanıcılar ile ilgili farklı durumları açıklayan birkaç numerik mesaj ile (eğer görme yetkiniz varsa) cevaplayacaktır. Eğer <nickmask>'te herhangi bir wildcard kullanılmamışsa, o nick ile ilgili görmeye yetkimiz olan her şey listelenecektir. Virgül ile ayrılmak kaydıyla birden fazla nick kullanılabilir.

<sunucu> parametresi ile kullanımı sorguyu belirtilen sunucu için gönderir. Bu tür sorgular kullanıcının idle (konuşmadığı süre) süresini öğrenmek için yararlıdır, çünkü bu bilgi sadece sorgulanan kullanıcının bulunduğu sunucu tarafından bilinen bir bilgidir. Diğer her şey ağ genelince bilinir. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
ERR_NONICKNAMEGIVEN --> (Herhangi bir nick belirlenmedi)
RPL_WHOISUSER --> (Whois sorgusu kullanıcı verisi cevabı)
RPL_WHOISCHANNELS --> (Whois sorgusu kanal verisi cevabı)
RPL_WHOISCHANNELS --> (Whois sorgusu kanal verisi cevabı)
RPL_WHOISSERVER --> (Whois sorgusu sunucu verisi cevabı)
RPL_AWAY --> (Kullanıcı meşgul durumda)
RPL_WHOISOPERATOR --> (Whois sorgusu ircoperatör verisi cevabı)
RPL_WHOISIDLE --> (Whois sorgusu idle süresi cevabı)
ERR_NOSUCHNICK --> (Böyle bir nick bulunmuyor)
RPL_ENDOFWHOIS --> (Whois sorgusu cevabı sonu)

Örnekler:

WHOIS Ekin --> ; Ekin kullanıcısı hakkındaki bilgileri verir.
WHOIS HelpEthos.Net Ekin --> ; Ekin kullanıcısı hakkındaki bilgiler direkt olarak HelpEthos.Net sunucusundan istenir.

** 4.5.3 Whowas

Komut: WHOWAS
Parametreler: <nick> [<sayı> [<sunucu>]]

Whowas sunucuda olmayan bir nick ile ilgili bilgi almak için kullanılır. Nick değişikliklerinde de bu sorgu kullanılabilir. Bu sorguya cevap olarak sunucu nick hafızasını tarar ve sorguda belirtilen nick ile ilgili bilgi arar (wildcard kullanılmaz). Listelenen bilgiler en yeniden eskiye doğru listelenir. Eğer birden fazla girdi varsa, <sayı> parametresinde belirtilen kadarı ya da parametre kullanılmamışsa hepsi listelenir. Eğer parametre olarak negatif (-x) bir sayı verilirse, yine tam liste alınır. Numerik cevaplar:

ERR_NONICKNAMEGIVEN --> (Herhangi bir nick belirlenmedi)
ERR_WASNOSUCHNICK --> (Nick ile ilgili kayıt yok)
RPL_WHOWASUSER --> (Kullanıcı için whowas cevabı)
RPL_WHOISSERVER --> (Sunucu için whowas cevabı)
RPL_ENDOFWHOWAS --> (Whowas cevabı sonu)

Örnekler:

WHOWAS Ekin --> ; Ekin nicki ile ilgili tüm girdileri listeler.
WHOWAS Scheat 9 --> ; Scheat nicki ile ilgili son 9 girdiyi listeler.
WHOWAS Fromhell 1 *.Net --> ; *.Net mask'i ile eşleşen ilk sunucudan Fromhell ile ilgili en yeni girdi alınır.

* 4.6 Çeşitli Mesajlar

Bu kategorideki mesajlar yukarıdaki herhangi bir kategoriye dahil değildir ancak yine de protokolün gerekli parçalarındandır.

** 4.6.1 Kill mesajı

Komut: KILL
Parametreler: <nick> <sebep>

KILL mesajı bir kullanıcının bağlantısının bağlı bulunduğu sunucu tarafından kesilmesi için kullanılır. KILL sunucular tarafından aynı nick ile birden fazla giriş olduğunda her iki bağlantıyı da kesmek için kullanılır, aynı zamanda operatör kullanımına da açıktır.

Otomatik olarak yeniden bağlanma özelliği kullanan kullanıcılar için KILL pek etkili değildir çünkü bağlantı sadece kısa bir süre için kopmuş olur. Yine de KILL veri alışverişini keser ve çok fazla bilgi gönderilmesini engeller. Her kullanıcı kill mesajlarını görebilir böylece sorun oluşturabilecek davranışlardan kaçınmayı öğrenebilirler.

Nicklerin ağ üzerinde tek olması gerekir, bu yüzden ikilik tespit edilen herhangi bir durumda (örneğin aynı nick ile bağlantı kurmaya çalışan iki kullanıcı olması durumu) her iki bağlantı da kesilir ve sadece bir tanesi o nick ile geri gelebilir.

Sebep kısmında KILL'in gerçek sebebi belirtilmelidir. Sunucu tarafından uygulanan KILL komutlarının sebep kısmında genellikle çakışan nicklerin köken bilgileri verilir. Operatörler ise herhangi bir sebep belirtmekte özgürdürler. KILL atan kullanıcıların kimliklerinin gizlenmesini ve komutun kötüye kullanılmasını engellemek amacıyla sebep kısmında ayrıca komutun kim tarafından kullanıldığı da belirtilir. Numerik cevaplar:

ERR_NOPRIVILEGES --> (Bu komutu kullanma yetkiniz yok)
ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)
ERR_NOSUCHNICK --> (Böyle bir nick bulunmuyor)
ERR_CANTKILLSERVER --> (Sunucuya kill atılamaz)

Örnek:

KILL Ekin ( HelpEthos.Net <- TRSohbet.Com) --> ; HelpEthos.Net ve TRSohbet.Com sunucuları arasındaki nick çatışmasına bağlı kill mesajı.

NOT:

Sadece operatörlerin diğer kullanıcıları KILL mesajı ile uzaklaştırabilmeleri önerilir. İdeal bir ortamda operatörlerin bile bunu kullanmaya ihtiyaçları olmayacak ve KILL mesajları sadece sunucular tarafından yaratılacaktır.

** 4.6.2 Ping mesajı

Komut: PING
Parametreler: <sunucu1> [<sunucu2>]

PING mesajı bağlantının diğer ucundaki bir kullanıcının varlığını kontrol etmek için kullanılır. Eğer bir bağlantıdan herhangi bir eylem alınmıyorsa, belli aralıklarla PING mesajı gönderilir. Eğer bağlantı PING mesajına belirlenen zaman içinde cevap vermezse, bağlantı sonlandırılır.

PING mesajı alan her kullanıcı <sunucu1>'e (PING mesajını gönderen sunucu) mümkün olan en kısa sürede PONG cevabı göndererek hala orada olduğunu bildirmelidir. Sunucular PING mesajlarına cevap vermemelidir ancak bağlantının aktif olduğunu tespit edebilmek için PING mesajlarına ihtiyaç duyarlar. Eğer <sunucu2> parametresi kullanılırsa PING mesajı o sunucuya aktarılır. Numerik cevaplar:

ERR_NOORIGIN --> (Eksik parametre)
ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)

Örnekler:

PING HelpEthos.Net --> ; Sunucu HelpEthos.Net sunucusuna bağlantılarının hala aktif olduğunu belirtmek üzere PING gönderiyor.
PING Fromhell --> ; Fromhell nickine gönderilen PING mesajı.

** 4.6.3 Pong mesajı

Komut: PONG
Parametreler: <daemon> [<daemon2>]

PONG mesajı PING mesajına verilen cevaptır. Eğer <daemon2> parametresi kullanılırsa mesaj oraya aktarılır. <daemon> parametresi PING mesajına cevap veren ve bu mesajı yaratan daemon'a aktarılır. Numerik cevaplar:

ERR_NOORIGIN --> (Eksik parametre)
ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)

Örnek:

PONG HelpEthos.Net TRSohbet.Com --> ; HelpEthos.Net sunucusundan TRSohbet.Com sunucusuna gönderilen PONG cevabı.

** 4.6.4 Error

Komut: ERROR
Parametreler: <hata mesajı>

ERROR komutu sunucular tarafından ciddi ya da ölümcül bir hatayı operatörlere bildirmek için kullanılır. Ayrıca sunucudan sunucuya da gönderilebilir ancak herhangi bir normal bilinmeyen istemciden geliyorsa kabul edilmez.

Bir ERROR mesajı sunucu-sunucu link'i ile oluşan hataları bildirmek için kullanılır. Mesaj bir sunucu tarafından bağlantının diğer ucundaki sunucuya gönderilir, o sunucu da operatörlerine iletir. Eğer mesaj bir sunucudan alınmışsa, diğer sunuculara gönderilmez.

Bir sunucu aldığı ERROR mesajını operatörlerine ilettiğinde mesaj NOTICE olarak gönderilir, bu şekilde istemcinin hatadan sorumlu olmadığı anlaşılır. Numerik yoktur.

Örnekler:

ERROR :Server *.Net already exists --> ; Hataya sebep olan sunucuya gönderilen ERROR mesajı.
NOTICE Ekin :ERROR from HelpEthos.Net -- Server *.Net already exists --> ; Yukarıdaki mesajın diğer sunucudaki Ekin nickine gönderimi.


5. OPSİYONEL

Bu bölümde OPSİYONEL mesajlar anlatılacaktır. Protokolün işleyişi için şart değildirler. Seçeneğin yokluğunda, bir hata cevabı ya da bilinmeyen komut hata mesajı yaratılır. Eğer mesaj başka bir sunucu için yaratıldıysa o sunucuya aktarılır. Bunun için ayrılmış olan numerikler aşağıda açıklanmıştır.

* 5.1 Away

Komut: AWAY
Parametreler: [mesaj]

AWAY mesajı ile kullanıcılar direkt olarak kendilerine gönderilen PRIVMSG komutlarına cevap olacak otomatik bir mesaj belirlerler. Otomatik cevap PRIVMSG komutunu kullanan kullanıcının bulunduğu sunucu tarafından gönderilir. Cevap veren tek sunucu komutu kullanan kullanıcının bağlı olduğu sunucudur.

AWAY mesajı parametre ile (meşgul mesajı belirlenir) ya da parametresiz (meşgul durumundan çıkılır) olarak kullanılabilir. Numerik cevaplar:

RPL_UNAWAY --> (Artık meşgul değilsiniz)
RPL_NOWAWAY --> (Meşgul oldunuz)

Örnekler:

AWAY
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
ir süre yokum. --> ; ''Bir süre yokum.'' mesajı ile meşgul olundu.
:Ekin AWAY --> ; Ekin meşgul durumundan çıktı.

* 5.2 Rehash Mesajı

Komut: REHASH
Parametreler: Yok

Rehash mesajı operatörler tarafından sunucunun konfigürasyon dosyasını yeniden okuması ve işleme koyması için kullanılır. Numerik cevaplar:

RPL_REHASHING --> (Rehash komutu başarılı)
ERR_NOPRIVILEGES --> (Bu komutu kullanma yetkiniz yok)

Örnekler:

REHASH --> ; Operatör yetkisine sahip bir kullanıcıdan sunucuya konfigürasyon dosyasını tekrar okuması için gönderilen mesaj.

* 5.3 Restart Mesajı

Komut: RESTART
Parametreler: Yok

Restart mesajı operatörler tarafından sunucunun yeniden başlatılması için kullanılır. Bu mesaj opsiyoneldir çünkü gelişigüzel kullanıcıların sunucuya operatör olarak bağlanması ve bu komutu uygulayarak serviste en azından bir kesinti yaratması açısından bir risk olarak görülebilir.

RESTART komutu her zaman komutu kullanan kullanıcının bağlı olduğu sunucu tarafından işleme alınmalı ve bağlı bulunan diğer sunuculara aktarılmamalıdır. Numerik cevaplar:

ERR_NOPRIVILEGES --> (Bu komutu kullanma yetkiniz yok)

Örnekler:

RESTART --> ; Parametre gerekmez.

* 5.4 Summon Mesajı

Komut: SUMMON
Parametreler: <kullanıcı> [<sunucu>]

SUMMON komutu bir IRC sunucusunun çalışır olduğu bir host'ta bulunan kullanıcılara IRC'ye katılmalarını isteyen bir mesaj göndermek için kullanılır. Bu mesaj sadece hedef sunucuda (a) SUMMON aktif ise, (b) kullanıcı oturum açmış ise ve (c) sunucu kullanıcının bağlı olduğu makineye müdahale edebiliyorsa gönderilir.

Eğer <sunucu> parametresi kullanılmazsa, sunucu kullanıcıyı bağlı bulunduğu sunucudan çağırır, o sunucuyu hedef olarak alır.

Eğer bir sunucuda summon aktif değilse, ERR_SUMMONDISABLED numeriği gönderilir ve summon mesajı ileri aktarılır. Numerik cevaplar:

ERR_NORECIPIENT --> (Alıcı belirtilmedi)
ERR_FILEERROR --> (Komutun işlenmesi sırasında, dosya işlemi başarısız oldu)
ERR_NOLOGIN --> (Kullanıcı online değil)
ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
RPL_SUMMONING --> (Kullanıcı çağırıldı)

Örnekler:

SUMMON Ekin --> ; Ekin kullanıcısı sunucunun host'undan çağırılır.
SUMMON Ekin HelpEthos.Net --> ; Ekin kullanıcısı HelpEthos.Net ismindeki sunucunun çalışıyor olduğu host'tan çağırılır.

* 5.5 Users

Komut: USERS
Parametreler: [<sunucu>]

USERS komutu who(1), rusers(1) ve finger(1) benzeri bir formatla, sunucuya oturum açmış olan tüm kullanıcıları listelemek için kullanılır. Güvenlik sebebi ile bazı sunucularda bu komut deaktif edilebilir. Eğer deaktif ise, bu durumu açıklamak üzere doğru numerik cevap sağlanmalıdır. Numerik cevaplar:

ERR_NOSUCHSERVER --> (Böyle bir sunucu bulunmuyor)
ERR_FILEERROR --> (Komutun işlenmesi sırasında, dosya işlemi başarısız oldu)
RPL_USERSSTART --> (Users listesi başlangıcı)
RPL_USERS --> (USERS komutuna verilen cevaptır. [nick veya nick listesi])
RPL_NOUSERS --> (Online nick bulunmuyor)
RPL_ENDOFUSERS --> (Users liste sonu)
ERR_USERSDISABLED --> (Users komutu kullanılamıyor)

Deaktif olduğunda çıkacak cevap: ERR_USERSDISABLED

Örnekler:

USERS HelpEthos.Net --> ; HelpEthos.Net sunucusuna bağlı kullanıcıların listelenmesi isteği.
:Ekin USERS HelpEthos.Net --> ; Ekin kullanıcısının HelpEthos.Net sunucusuna bağlı kullanıcıların listelenmesi için uyguladığı komut.

* 5.6 Operwall Mesajı

Komut: WALLOPS
Parametreler: Tüm online operatörlere gönderilecek metin

Online durumdaki tüm operatörlere mesaj göndermek için kullanılır. WALLOPS'un bir kullanıcı komutu olarak düzenlenmesinden sonra komutun sıkça kötüye kullanıldığı ve birçok kişiye mesaj gönderme (WALL benzeri) amacıyla kullanıldığı tespit edilmiştir. Buna karşılık olarak WALLOPS kullanımının sadece sunucuların gönderen olarak tanınması şeklinde düzenlenmesi önerilmiştir. Numerik cevaplar:

ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)

Örnekler:

:HelpEthos.Net WALLOPS :Connect '*.TRSohbet.Com 6667' from Ekin --> ; HelpEthos.Net sunucusunun aldığı bir connect mesajını WALLOPS kullanarak iletmesi (komutu kullanan: Ekin).

* 5.7 Userhost Mesajı

Komut: USERHOST
Parametreler: <nick>{<boşluk><nick>}

USERHOST komutu boşluk karakteri ile ayrılmış en fazla 5 adet nick içeren bir liste vererek bu nickler ile ilgili bilgi almak için kullanılır. Dönüt bilgide de her cevap birbirinden boşluk karakteri ile ayrılmıştır. Numerik cevaplar:

RPL_USERHOST --> (Userhost komutuna verilen cevap)
ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)

Örnekler:

USERHOST Ekin Raven Strathmore --> ; Ekin, Raven ve Strathmore nickleri için USERHOST sorgusu.

* 5.8 Ison Mesajı

Komut: ISON
Parametreler: <nick>{<boşluk><nick>}

ISON komutu bir nickin sunucuda olup olmadığını anlamanın hızlı ve etkili bir yöntemini sağlamak adına oluşturulmuştur. ISON sadece bir parametre alır: bir ya da birden fazla (birbirinden boşluk karakteri ile ayrılmış) nick listesi. Bu listede belirtilen nicklerden online olan her bir nick için sunucu cevap satırına o nicki ekler. Yani bu liste boş da olabilir (eğer nicklerden hiçbiri online değilse), komuttaki listenin birebir aynısı da olabilir (eğer tüm nickler online ise) ya da online durumuna göre diğer herhangi bir nick listesi de olabilir. ISON komutunda tek seferde sorgulanabilecek nickler için net bir sayı yoktur, ancak nick listesindeki karakterler toplamı 512 karakteri geçmemelidir. Eğer geçerse sunucu 512 karaktere uydurabilmek için sondan bir kısmını kesebilir.

ISON komutu sadece komutu kullanan kullanıcının direkt olarak bağlı olduğu sunucu tarafından işlem görür ve diğer sunuculara aktarılmaz. Numerik cevaplar:

RPL_ISON --> (Ison komutuna verilen cevap)
ERR_NEEDMOREPARAMS --> (Daha fazla parametre gerekiyor)

Örnekler:

ISON Ekin Scheat PlaneT Ravenv Fromhell eLaa AmiR --> ; 7 nick için ISON örneği.


6. CEVAPLAR

Aşağıda yukarıda anlatılan komutlara verilen numerik cevapların bir listesi verilmiştir. Her numerik kendi adı, numarası ve cevap satırı ile verilmiştir.

* 6.1 Hata Cevapları

401 ERR_NOSUCHNICK
"<nick> :No such nick/channel"

- Bir komutta kullanılan nickin o anda sunucuda bulunmadığı anlamına gelir.

402 ERR_NOSUCHSERVER
"<sunucu ismi> :No such server"

- Verilen sunucu isminin mevcut olmadığı anlamına gelir.

403 ERR_NOSUCHCHANNEL
"<kanal ismi> :No such channel"

- Verilen kanal isminin geçerli olmadığı, öyle bir kanal bulunmadığı anlamına gelir.

404 ERR_CANNOTSENDTOCHAN
"<kanal ismi> :Cannot send to channel"

- (a) +n modundaki bir kanala kanal dışından mesaj göndermeye çalışan, (b) +m modundaki bir kanala herhangi bir prefix sahibi olmaksızın mesaj göndermeye çalışan kullanıcıya gönderilen hata mesajıdır.

405 ERR_TOOMANYCHANNELS
"<kanal ismi> :You have joined too many channels"

- Bulunabileceği maksimum kanal sayısını doldurmuş olduğu halde başka bir kanala girmeye çalışan kullanıcıya gönderilen hata mesajıdır.

406 ERR_WASNOSUCHNICK
"<nick> :There was no such nickname"

- WHOWAS sorgusunda kullanılmış olan bir nick ile ilgili hiçbir kayıt olmadığı anlamına gelir.

407 ERR_TOOMANYTARGETS
"<hedef> uplicate recipients. No message delivered."

- identd@host formatını kullanarak PRIVMSG/NOTICE göndermeye çalışan bir kullanıcıya aynı formatta birden fazla kişi bulunduğu zaman gönderilen hata mesajıdır.

409 ERR_NOORIGIN
":No origin specified"

- PING ya da PONG mesajının mesajı gönderen kişi ile ilgili parametresinin eksik olması durumunda kişiye gönderilen hata mesajıdır.

411 ERR_NORECIPIENT
":No recipient given (<komut>)"

- Kullanılan komutta herhangi bir alıcı belirtilmediği anlamına gelir.

412 ERR_NOTEXTTOSEND
":No text to send"

- Kullanılan komutta gönderilecek herhangi bir metin girilmediği anlamına gelir.

413 ERR_NOTOPLEVEL
"<mask> :No toplevel domain specified"

- Çok genel bir mask kullanıldığı anlamına gelir.

414 ERR_WILDTOPLEVEL
"<mask> :Wildcard in toplevel domain"

- 412 - 414 hataları PRIVMSG ile mesajın herhangi bir sebeple gönderilemediği anlamına gelir. ERR_NOTOPLEVEL ve ERR_WILDTOPLEVEL hataları da "PRIVMSG $<sunucu>" ya da "PRIVMSG #<host>" kullanımı yanlış şekilde uygulandığında verilir.

421 ERR_UNKNOWNCOMMAND
"<komut> :Unknown command"

- Sunucuya gönderilen komutun bilinmeyen bir komut olduğu/öyle bir komut olmadığı anlamına gelir.

422 ERR_NOMOTD
":MOTD File is missing"

- MOTD dosyasının sunucu tarafından açılamadığı anlamına gelir. / Kullanıcıya gönderilecek herhangi bir MOTD olmadığını belirtir.

423 ERR_NOADMININFO
"<sunucu> :No administrative info available"

- ADMIN mesajına karşılık olarak herhangi bir bilgi bulunmadığı anlamına gelir.

424 ERR_FILEERROR
":File error doing <file op> on <file>"

- Bir mesajın/komutun işlenmesi sırasında dosya hatası meydana geldiği anlamına gelir.

431 ERR_NONICKNAMEGIVEN
":No nickname given"

- Nick parametresi kullanılması gereken bir mesajda bu parametrenin eksik olması durumunda alınan hata mesajıdır.

432 ERR_ERRONEUSNICKNAME
"<nick> :Erroneus nickname"

- Bir NICK mesajı alındığında, kullanılmak istenen nick geçersiz bir karakter içerdiğinde ya da kullanımı yasak olduğunda alınan hata mesajıdır. (Bu numerik yanlış yazılmıştır, ancak tarihi sebeplerden dolayı isim bu şekilde kalmış ve değiştirilmemiştir. Doğrusu: erroneous)

433 ERR_NICKNAMEINUSE
"<nick> :Nickname is already in use"

- Bir nick değişikliği yapılması durumunda kullanıcının geçmek istediği nickin bir başkası tarafından kullanılmakta olduğu anlamına gelir.

436 ERR_NICKCOLLISION
"<nick> :Nickname collision KILL"

- Nick çatışması durumunda alınan hata mesajıdır.

441 ERR_USERNOTINCHANNEL
"<nick> <kanal> :They aren't on that channel"

- Komutta kullanılan hedef nickin, yine komutta belirtilen kanalda bulunmadığı anlamına gelir.

442 ERR_NOTONCHANNEL
"<kanal> :You're not on that channel"

- Bir kullanıcının içinde bulunmadığı bir kanalla ilgili, kanalda bulunmasını gerektirecek bir komut uyguladığında alınan hata mesajıdır.

443 ERR_USERONCHANNEL
"<kullanıcı> <kanal> :is already on channel"

- Bir kullanıcı zaten içinde bulunduğu bir kanala davet edildiğinde alınan hata mesajıdır. (Sajoin komutu ile de aynı hata alınır.)

444 ERR_NOLOGIN
"<kullanıcı> :User not logged in"

- Oturum açmamış bir kullanıcı için SUMMON komutu kullanıldığında alınan hata mesajıdır.

445 ERR_SUMMONDISABLED
":SUMMON has been disabled"

- SUMMON komutunun aktif olmadığı ya da eklentinin hiç kurulmadığı anlamına gelir.

446 ERR_USERSDISABLED
":USERS has been disabled"

- USERS komutunun aktif olmadığı ya da eklentinin hiç kurulmadığı anlamına gelir.

451 ERR_NOTREGISTERED
":You have not registered"

- Kullanıcının ayrıntılı biçimde analiz edilebilmesi için kayıtlı olması/giriş yapmış olması gerektiği anlamına gelir.

461 ERR_NEEDMOREPARAMS
"<komut> :Not enough parameters"

- Birçok komut sonrası alınabilecek bir hatadır. Yetersiz parametre kullanıldığı anlamına gelir.

462 ERR_ALREADYREGISTRED
":You may not reregister"

- Giriş yaptığı detayları değiştirmeye çalışan herhangi bir bağlantıya gönderilen hata mesajıdır. (İkinci USER mesajından alınan şifre ve kullanıcı detayları gibi)

463 ERR_NOPERMFORHOST
":Your host isn't among the privileged"

- Bağlantı kurulmasına izin verilmeyen bir host üzerinden sunucuya bağlanmaya çalışan kullanıcıya gönderilen hata mesajıdır.

464 ERR_PASSWDMISMATCH
":Password incorrect"

- Şifre gerektiren bir bağlantı kurulmaya çalışırken şifre girilmediği ya da şifrenin yanlış girildiği anlamına gelir.

465 ERR_YOUREBANNEDCREEP
":You are banned from this server"

- Giriş yasağı konmuş bir host'tan bağlantı kurmaya çalışan kullanıcıya gönderilen hata mesajıdır. (Banlısınız)

467 ERR_KEYSET
"<kanal> :Channel key already set"

- Giriş şifresi mevcut olan bir kanala şifre konmaya çalışıldığında alınan hata mesajıdır.

471 ERR_CHANNELISFULL
"<kanal> :Cannot join channel (+l)"

- Kullanıcı limiti dolu olan bir kanala girilmeye çalışıldığında alınan hata mesajıdır.

472 ERR_UNKNOWNMODE
"<karakter> :is unknown mode char to me"

- Kanala bilinmeyen bir mod konmaya çalışıldığında alınan hata mesajıdır. (örneğin: /mode #helpethos +ğ)

473 ERR_INVITEONLYCHAN
"<kanal> :Cannot join channel (+i)"

- +i modundaki bir kanala girilmeye çalışıldığında alınan hata mesajıdır.

474 ERR_BANNEDFROMCHAN
"<kanal> :Cannot join channel (+b)"

- Banlı olunan bir kanala girilmeye çalışıldığında alınan hata mesajıdır.

475 ERR_BADCHANNELKEY
"<kanal> :Cannot join channel (+k)"

- +k modundaki bir kanala girmeye çalışıldığında şifre girilmediğini ya da yanlış şifre girildiğini ifade eder.

481 ERR_NOPRIVILEGES
":Permission Denied- You're not an IRC operator"

- IRCOP yetkisi gerektiren bir komut flag sahibi olmayan bir kullanıcı tarafından kullanıldığı zaman alınan hata mesajıdır.

482 ERR_CHANOPRIVSNEEDED
"<kanal> :You're not channel operator"

- Kanalda operatör durumunda olunması gereken bir komut prefix sahibi olmayan bir kullanıcı tarafından kullanıldığında alınan hata mesajıdır.

483 ERR_CANTKILLSERVER
":You cant kill a server!"

- Bir sunucuya KILL komutu uygulamaya çalışan kullanıcıya gönderilen hata mesajıdır.

491 ERR_NOOPERHOST
":No O-lines for your host"

- Oper şifresi girilmeye çalışılan nickte herhangi bir oper yetkisi bulunmadığı anlamına gelir. (/oper Ekin şifre = Ekin nickinde herhangi bir oper yetkisi yok)

501 ERR_UMODEUNKNOWNFLAG
":Unknown MODE flag"

- Kullanıcının nickine bilinmeyen bir mod almaya çalışması sonucu gönderilen hata mesajıdır. (/mode Ekin +ü = ü modu bulunmuyor)

502 ERR_USERSDONTMATCH
":Cant change mode for other users"

- Kullanıcının kendisi dışında başka bir nickin modlarını görmeye veya değiştirmeye çalıştığında alınan hata mesajıdır.

* 6.2 Komut Yanıtları

300 RPL_NONE
Kullanılmayan bir komut cevabıdır. Sadece yeni özelliklerin denenmesinde kullanılır ancak daemon sürümlerinde yine de bulunur.

302 RPL_USERHOST
":[<cevap>{<boşluk><cevap>}]"

- USERHOST komutuna karşılık olarak kullanılan cevap formatıdır. Cevap satırı aşağıdaki gibi oluşturulur:

<cevap> ::= <nick>['*'] '=' <'+'|'-'><host ismi>

'*' karakteri kullanıcının IRCoperatör olup olmadığını gösterir. '-' ve '+' karakterleri de sırasıyla kullanıcının meşgul olduğunu ya da olmadığını gösterir.

303 RPL_ISON
":[<nick> {<boşluk><nick>}]"

- ISON komutuna karşılık olarak kullanılan cevap formatıdır.

301 RPL_AWAY
"<nick> :<meşgul mesajı>"

305 RPL_UNAWAY
":You are no longer marked as being away"

306 RPL_NOWAWAY
":You have been marked as being away"

- Bu cevaplar (eğer aktifse) AWAY komutu ile birlikte kullanılır. RPL_AWAY meşgul olan bir kullanıcıya PRIVMSG gönderildiğinde alınır. RPL_AWAY sadece kullanıcının bağlı olduğu sunucu tarafından gönderilir. RPL_UNAWAY ve RPL_NOWAWAY cevapları kullanıcı meşgul olduğunda ve meşgul durumundan çıktığında alınır.

311 RPL_WHOISUSER
"<nick> <identd> <host> * :<real name>"

312 RPL_WHOISSERVER
"<nick> <sunucu> :<sunucu bilgisi>"

313 RPL_WHOISOPERATOR
"<nick> :is an IRC operator"

317 RPL_WHOISIDLE
"<nick> <tamsayı> :seconds idle"

318 RPL_ENDOFWHOIS
"<nick> :End of /WHOIS list"

319 RPL_WHOISCHANNELS
"<nick> :{[@|+]<kanal><boşluk>}"

- 311 - 313, 317 - 319 arasındaki cevaplar WHOIS komutuna karşılık verilen cevaplardır. Yeterli parametre kullanıldığında sunucu yukarıdaki cevaplardan birini verir ya da (eğer nick sunucuda değilse) bir hata mesajı verir. RPL_WHOISUSER cevabındaki '*' karakteri wildcard karakter değil gerçek karakter olarak kullanılmıştır. Sadece RPL_WHOISCHANNELS cevabı birden fazla gönderilebilir. Kanal isminin yanındaki '@' ve '+' karakterleri kullanıcının o kanalda sahip olduğu prefix'i belirtir. RPL_ENDOFWHOIS cevabı WHOIS mesajının sona erdiği anlamına gelir.

314 RPL_WHOWASUSER
"<nick> <identd> <host> * :<real name>"

369 RPL_ENDOFWHOWAS
"<nick> :End of WHOWAS"

- Bir WHOWAS mesajına cevap verirken, sunucu verilen listedeki her bir nick için RPL_WHOWASUSER, RPL_WHOISSERVER ya da ERR_WASNOSUCHNICK mesajlarından birini kullanır. Cevap grubunun sonunda, sadece tek bir cevap olsa ve bu da bir hata mesajı olsa dahi RPL_ENDOFWHOWAS cevabı olmalıdır.

321 RPL_LISTSTART
"Channel :Users Name"

322 RPL_LIST
"<kanal> <# visible> :<başlık>"

323 RPL_LISTEND
":End of /LIST"

- RPL_LISTSTART, RPL_LIST ve RPL_LISTEND cevapları sırasıyla başlangıç, bilgi içeren asıl cevaplar ve LIST komutunun sona erdiğini ifade eden sunucu cevabını içeren cevaplardır. Eğer bilgi verilecek herhangi bir kanal yoksa, sadece başlangıç ve son cevapları gönderilir.

324 RPL_CHANNELMODEIS
"<kanal> <mod> <mod parametreleri>"

331 RPL_NOTOPIC
"<kanal> :No topic is set"

332 RPL_TOPIC
"<kanal> :<başlık>"

- Kanal başlığını görmek için TOPIC komutu uygulandığında, başlığın varlığı ya da yokluğuna göre sırasıyla 332 ve 331 numarası cevaplar alınır.

341 RPL_INVITING
"<kanal> <nick>"

- INVITE komutunun başarılı olduğu ve kullanıcıya iletildiği anlamına gelir. (Dökümanda INVITE kullanımı ters olarak verilmiştir. Doğrusu: /invite nick #kanal)

342 RPL_SUMMONING
"<kullanıcı> :Summoning user to IRC"

- SUMMON komutu sonrası sunucu tarafından kullanıcının sunucuya çağrıldığını ifade eden cevaptır.

351 RPL_VERSION
"<versiyon>.<debuglevel> <sunucu> :<yorum>"

- VERSION detaylarını gösteren sunucudan alınan cevaptır. <versiyon> kullanılan yazılımın versiyonunu gösterir (herhangi bir yama seviyesini de içerir). <debuglevel> sunucunun "debug mod"da çalışıp çalışmadığını gösterir. "yorum" kısmında versiyon ya da versiyon detayları ile ilgili bilgileri gösterir.

352 RPL_WHOREPLY
"<kanal> <identd> <host> <sunucu> <nick> <H|G>[*][@|+] :<hopcount> <real name>"

315 RPL_ENDOFWHO
"<isim> :End of /WHO list"

- RPL_WHOREPLY ve RPL_ENDOFWHO ikilisi WHO mesajına cevap olarak kullanılır. RPL_WHOREPLY sadece eğer WHO sorgusuna uyan bir kullanıcı varsa gönderilir. Eğer WHO mesajı ile birlikte kullanılmış parametreler varsa, her bir maddenin sorgusu gönderildikten sonra bir RPL_ENDOFWHO cevabı gönderilir.

353 RPL_NAMREPLY
"<kanal> :[[@|+]<nick> [[@|+]<nick> [...]]]"

366 RPL_ENDOFNAMES
"<kanal> :End of /NAMES list"

- NAMES mesajına cevap olarak, kullanıcıya RPL_NAMREPLY ve RPL_ENDOFNAMES ikilisini içeren bir mesaj gönderilir. Eğer sorguda belirtilen kanal bulunamazsa sadece RPL_ENDOFNAMES gönderilir. Bu durumun bir istisnası olarak NAMES mesajının herhangi bir parametre olmaksızın kullanımı ile tüm görünür kanalların bir listesi RPL_NAMEREPLY cevapları ve bir tane RPL_ENDOFNAMES cevabı ile alınır.

364 RPL_LINKS
"<mask> <sunucu> :<hopcount> <sunucu bilgisi>"

365 RPL_ENDOFLINKS
"<mask> :End of /LINKS list"

- LINKS mesajına cevap olarak sunucu RPL_LINKS numeriğini ve listenin sonunda da RPL_ENDOFLINKS cevabını gönderir.

367 RPL_BANLIST
"<kanal> <banid>"

368 RPL_ENDOFBANLIST
"<kanal> :End of channel ban list"

- Bir kanaldaki banları listelerken sunucu listeyi RPL_BANLIST ve RPL_ENDOFBANLIST cevapları ile gönderir. Her bir ban mask'i için ayrı RPL_BANLIST cevabı gönderilir. Ban mask'leri listelendikten sonra (ya da hiç ban yoksa) RPL_ENDOFBANLIST cevabı gönderilir.

371 RPL_INFO
":<satır>"

374 RPL_ENDOFINFO
":End of /INFO list"

- INFO mesajına cevap veren bir sunucu tüm sunucu bilgilerini bir RPL_INFO cevap dizisi ve dizinin sonunda da bir RPL_ENDOFINFO cevabı ile gönderir.

375 RPL_MOTDSTART
":- <sunucu> Günün mesajı - "

372 RPL_MOTD
":- <metin>"

376 RPL_ENDOFMOTD
":End of /MOTD command"

- MOTD mesajına cevap verilirken MOTD dosyasındaki bilgiler satır satır gösterilir, her bir satır en fazla 80 karakter uzunluğunda olabilir ve her biri için RPL_MOTD formatında cevaplar gönderilir. Bu cevaplardan önce bir tane RPL_MOTD cevabı ve onlardan sonra da RPL_MOTDSTART cevabı bulunur.

381 RPL_YOUREOPER
":You are now an IRC operator"

- RPL_YOUREOPER cevabı kullanıcı OPER komutunu başarılı biçimde kullandığında ve operatör yetkilerine sahip olduğunda alınır.

382 RPL_REHASHING
"<yapılandırma dosyası> :Rehashing"

- Eğer REHASH seçeneği kullanılır ve bir operatör REHASH mesajı gönderirse, operatöre RPL_REHASHING cevabı gönderilir.

391 RPL_TIME
"<sunucu> :<sunucunun lokal zamanını gösteren satır>"

- TIME mesajına cevap verilirken sunucu RPL_TIME formatını kullanarak cevap verir. Zamanı gösteren satır sadece tarihi ve zamanı içerir. Zaman satırı için başka bir gereksinim yoktur.

392 RPL_USERSSTART
":UserID Terminal Host"

393 RPL_USERS
":%-8s %-9s %-8s"

394 RPL_ENDOFUSERS
":End of users"

395 RPL_NOUSERS
":Nobody logged in"

- Eğer bir sunucu USERS mesajı alırsa, RPL_USERSTART, RPL_USERS, RPL_ENDOFUSERS ve RPL_NOUSERS cevapları kullanılır. İlk olarak RPL_USERSSTART cevabı gönderilir, ondan sonra bir RPL_USERS dizisi ya da tek bir RPL_NOUSER cevabı alınır. Bunu takiben de RPL_ENDOFUSERS cevabı alınır.

200 RPL_TRACELINK
"Link <versiyon & debug level> <hedef> <sonraki sunucu>"

201 RPL_TRACECONNECTING
"Try. <class> <sunucu>"

202 RPL_TRACEHANDSHAKE
"H.S. <class> <sunucu>"

203 RPL_TRACEUNKNOWN
"???? <class> [<client IP address in dot form>]"

204 RPL_TRACEOPERATOR
"Oper <class> <nick>"

205 RPL_TRACEUSER
"User <class> <nick>"

206 RPL_TRACESERVER
"Serv <class> <int>S <int>C <sunucu> <nick!identd|*!*>@<host|sunucu>"

208 RPL_TRACENEWTYPE
"<newtype> 0 <client name>"

261 RPL_TRACELOG
"File <logfile> <debug level>"

- RPL_TRACE* cevaplarının tümü sunucu tarafından TRACE mesajına gönderilen cevaplardır. Kaç tanesinin gönderileceği TRACE mesajına ve mesajın bir operatör tarafından gönderilip gönderilmediğine bağlıdır. Hangisinin önce gönderileceği ile ilgili önceden belirlenmiş bir şey yoktur. RPL_TRACEUNKNOWN, RPL_TRACECONNECTING ve RPL_TRACEHANDSHAKE cevapları henüz tam olarak kurulmamış ya da bilinmeyen, hala bağlanmaya çalışan ya da 'server handshake' evresini tamamlamak üzere olan bağlantılar için kullanılır. RPL_TRACELINK cevabı TRACE mesajını bir başka sunucuya iletecek olan herhangi bir sunucu tarafından gönderilir. Tüm ağı kateden bir TRACE komutuna cevap olarak gönderilen bir RPL_TRACELINKs listesi o rota üzerindeki sunucuların gerçek bağlanırlıklarını yansıtmalıdır. RPL_TRACENEWTYPE cevabı diğer kategorilere uymayan ama yine de gösterilen herhangi bir bağlantı için kullanılır.

211 RPL_STATSLINKINFO
"<link ismi> <sendq> <gönderilen mesajlar> <gönderilen bitler> <alınan mesajlar> <alınan bitler> <online süresi>"

212 RPL_STATSCOMMANDS
"<komut> <kullanım sayısı>"

213 RPL_STATSCLINE
"C <host> * <isim> <port> <class>"

214 RPL_STATSNLINE
"N <host> * <isim> <port> <class>"

215 RPL_STATSILINE
"I <host> * <host> <port> <class>"

216 RPL_STATSKLINE
"K <host> * <kullanıcı ismi> <port> <class>"

218 RPL_STATSYLINE
"Y <class> <ping sıklığı> <bağlantı sıklığı> <max sendq>"

219 RPL_ENDOFSTATS
"<stats harfi> :End of /STATS report"

241 RPL_STATSLLINE
"L <hostmask> * <sunucu adı> <maxdepth>"

242 RPL_STATSUPTIME
":Server Up %d days %d:%02d:%02d"

243 RPL_STATSOLINE
"O <hostmask> * <isim>"

244 RPL_STATSHLINE
"H <hostmask> * <sunucu ismi>"

221 RPL_UMODEIS
"<kullanıcı modu satırı>"

- Kullanıcının kendi nick modlarını görmek için uyguladığı komut sonrası gönderilen cevaptır.

251 RPL_LUSERCLIENT
":There are <tamsayı> users and <tamsayı> invisible on <tamsayı> servers" (4 normal kullanıcı ve 9 gizli kullanıcı 2 sunucuda bulunuyor)

252 RPL_LUSEROP
"<tamsayı> perator(s) online" (6 IRC Operatörü bağlı)

253 RPL_LUSERUNKNOWN
"<tamsayı> :unknown connection(s)"

254 RPL_LUSERCHANNELS
"<tamsayı> :channels formed" (4 kanal oluşmuş durumda)

255 RPL_LUSERME
":I have <tamsayı> clients and <tamsayı> servers" (6 kullanıcım ve 1 sunucum bulunuyor)

- Bir LUSERS mesajı alındığında, sunucu RPL_LUSERCLIENT, RPL_LUSEROP, RPL_USERUNKNOWN, RPL_LUSERCHANNELS ve RPL_LUSERME cevaplarından oluşan bir mesaj gönderir. Cevap verirken sunucu RPL_LUSERCLIENT ve RPL_USERME cevaplarını göndermek zorundadır. Diğer cevaplar sadece sıfırdan büyük değerler olduğunda gönderilir.

256 RPL_ADMINME
"<sunucu> :Administrative info"

257 RPL_ADMINLOC1
":<admin bilgisi>"

258 RPL_ADMINLOC2
":<admin bilgisi>"

259 RPL_ADMINEMAIL
":<admin bilgisi>"

- Bir ADMIN mesajına cevap verirken, sunucunun RPL_ADMINME cevabından RPL_ADMINEMAIL cevabına kadar, her biri için bir mesaj göndermesi beklenir. RPL_ADMINLOC1 cevabının sunucucun hangi ülke, eyalet ve şehirde olduğunu, (RPL_ADMINLOC2) hangi üniversitenin hangi departmanında olduğunu ve son olarak da (RPL_ADMINEMAIL) sunucu yönetimi ile iletişime geçilebilecek bir email adresini içermesi beklenir.

* 6.3 Ayrılmış Numerikler

Bu numerikler yukarıda anlatılmamıştır çünkü:

1. Artık kullanılmamaktadırlar;
2. Gelecekte kullanılmak üzere ayrılmışlardır;
3. Kullanımdadırlar ancak IRC protokolünün sosyal olmayan özellikteki kısımları için kullanılırlar.

209 RPL_TRACECLASS
217 RPL_STATSQLINE
231 RPL_SERVICEINFO
232 RPL_ENDOFSERVICES
233 RPL_SERVICE
234 RPL_SERVLIST
235 RPL_SERVLISTEND
316 RPL_WHOISCHANOP
361 RPL_KILLDONE
362 RPL_CLOSING
363 RPL_CLOSEEND
373 RPL_INFOSTART
384 RPL_MYPORTIS
466 ERR_YOUWILLBEBANNED
476 ERR_BADCHANMASK
492 ERR_NOSERVICEHOST


7. KULLANICI VE SUNUCU ONAYI

Kullanıcılar ve sunucular aynı derecede onaydan geçmek durumundadırlar. Kurulan bağlantılarda her ikisi için de host isimlerine göre IP numarası taraması (ve bunun tam tersi) yapılır. Daha sonra her iki bağlantı da şifre (eğer o bağlantı için belirlenmiş bir şifre varsa) kontrolünden geçirilirler. Şifre kontrolü genellikle sadece sunucular ile kullanılsa da, bu kontroller tüm bağlantılar için yapılabilir.

Bunlara ek olarak son zamanlarda sıklaşmaya başlayan bir de kullanıcı ismi kontrolü yapılmaktadır. Bağlantının diğer ucundaki kullanıcı ismi, RFC 1413'te bahsedildiği gibi tipik bir şekilde IDENT gibi bir onay sunucusuna bağlanılarak bulunur.

Şifreler olmaksızın ağ bağlantısının diğer ucunda kimin olduğunu tespit etmek kolay değildir. Bu yüzden sunucular arası bağlantılarda ident sunucusu kullanmak gibi önlemlere ek olarak şifre kullanımı da şiddetle önerilir.


8. MEVCUT UYGULAMALAR

Bu protokolün tek güncel uygulaması 2.8 versiyonlu IRC sunucusudur. Önceki versiyonlar bu dökümanda anlatılan komutların bir kısmını ya da hepsini numerik cevapların birçoğunu NOTICE mesajları ile değiştirerek uygulayabilirler. Ne yazık ki, geriye uyumluluk için gerekenler yüzünden bu dökümandaki bazı kısımların uygulanması tasarlandığı gibi olmaz. Farkedilebilir bir fark şudur:

* Bir mesajdaki herhangi bir LF ya da CR karakteri mesajın sona erdiğini gösterir. (CR-LF'nin gerekiyor olması yerine)

Bu bölümün geri kalanında ele alınan konular daha çok bir sunucu kurmak isteyenlere yöneliktir, ancak bazı kısımlar direkt olarak kullanıcıları da ilgilendirir.

* 8.1 Ağ Protokolü: TCP

IRC TCP üzerine kuruludur çünkü TCP bu konferans sistemine uygun güvenilir bir ağ protokolü sunar. Çoklu ip kullanımı da bir alternatiftir, ama günümüzde yaygın olarak mevcut ya da desteklenebilir değildir.

** 8.1.1 Unix soketlerinin desteklenmesi

Unix domain soketlerinin dinleme/bağlanma operasyonlarına izin verdiği düşünülürse, güncel uygulamanın hem kullanıcı hem de sunucu bağlantılarını Unix soketi üzerinde sağlayacak şekilde ayarlanması sağlanabilir. Bunlar host isimleri '/' karakteri ile başladığı zaman soket olarak tanınırlar.

Unix domain soketinde kurulmuş bağlantılar ile ilgili herhangi bir bilgi sağlanırken, eğer gerçek soket ismi istenmemişse, sunucu yol ismi yerine gerçek host ismi vermelidir.

* 8.2 Komut Ayrıştırması

Kullanıcı ve sunucular için kullanışlı bir 'tamponlanmamış' ağ sağlamak için her bağlantıya kendine özel olarak en yeni okuma ve ayrıştırma sonuçlarının tutulduğu bir 'girdi tampon' verilir. 512 bitlik bir tampon miktarı da 1 bütün mesajı tutmak için ayrılsa da genellikle birden fazla komut tutulur. Özel tampon kısmı her geçerli mesajın okunmasından sonra ayrıştırılır. Tamponda bir kullanıcıdan gelmiş birden fazla mesaj ile ilgilenilirken dikkatli olunmalıdır çünkü bir tanesi kullanıcının sunucu ile bağlantısının kesilmesine sebep olabilir.

* 8.3 Mesaj İletimi

Ağ link'lerinin dolu olduğu ya da veri göndermeye çalıştığımız host'ların veri gönderme konusunda problem yaşadığı durumlarla sıklıkla karşılaşabiliriz. Unix bunu genellikle TCP penceresi ve iç tamponlar yoluyla çözse de, yeni bir link kurulduğunda sunucunun göndereceği çok fazla miktarda veri oluşur ve çekirdekte (kernel'de) sağlanan küçük miktardaki tamponlar çıkış sırası için yeterli olmaz. Bu problemi hafifletmek için, veri gönderimi için FIFO (First In, First Out (İlk giren, ilk çıkar)) sırası olarak bir "gönderim kuyruğu" kullanılır. Tipik bir "gönderim kuyruğu" bağlantısı yavaş olan büyük IRC ağlarına yeni bir sunucu bağlandığı zaman 200 kilobayta kadar büyüyebilir.

Bir sunucu bağlantılarını seçerken önce aldığı tüm veriyi okur ve ayrıştırır, gönderilecek verileri sıralar. Mevcut tüm veriler işlendiğinde, kuyruğa alınmış veriler gönderilir. Bu yazım() sistemi çağrılarının kullanım sayısını düşürür ve TCP'ye daha büyük desteler oluşturma konusunda yardımcı olur.

* 8.4 Bağlantı 'Canlılığı'

Bir bağlantının sona erdiğinin ya da cevap vermediğinin tespit edilmesi için sunucu, bağlantılarının her birine belli bir süre içinde cevap almadığını gösteren ping mesajları atmalıdır.

Eğer bir bağlantı belirlenen süre içinde cevap vermezse, bağlantı uygun prosedürler kullanılarak kapatılır. Bir bağlantı ayrıca izin verilen maksimum sendq miktarı aşıldığında da kapatılır çünkü sunucu işlem blokesi durumundansa yavaş bir bağlantının koparılması daha iyidir.

* 8.5 Sunucu-İstemci Bağlantısının Kurulması

Bir IRC sunucusuna bağlanılırken, kullanıcıya (eğer varsa) MOTD bilgisi ve mevcut kullanıcı/sunucu miktarı gönderilir (Lusers komutuna göre). Sunucunun aynı zamanda kullanıcıya ismini, versiyonunu ve diğer tanıtıcı bilgileri de açık ve net bir biçimde göndermesi beklenir.

Bundan sonra sunucunun, yeni kullanıcının kendisi tarafından girilmiş nick ve diğer bilgilerini (USER komutu) ve kendi tespit ettiği (DNS onay sunucusu) bilgileri ağa bildirir. Sunucu bu bilgiyi önce NICK ve sonra USER olmak üzere aktarır.

* 8.6 Sunucu-Sunucu Bağlantısının Kurulması

Sunucu-sunucu bağlantısının kurulması işlemi tehlikeli olabilir çünkü problemlerin oluşabileceği çok fazla alan vardır - en azından köken sorunları oluşabilir.

Bir sunucu geçerli bir PASS/SERVER ikilisinin takip ettiği bir bağlantı aldıktan sonra, sunucu o bağlantı için kendi PASS/SERVER bilgisini ve diğer durum bilgilerini aktarır.

Bir PASS/SERVER ikilisi başlatılırken, sunucu bağlantıyı kabul etmeden önce öncelikle cevap veren sunucunun uygun biçimde tanınıp tanınmadığını kontrol eder.

** 8.6.1 Bağlantı sırasında durum bilgilerinin sunucular arasında değişimi

Sunucular arasında durum bilgisi alışverişinde düzen önemlidir. İstenen sıra aşağıdaki gibidir:

* bilinen tüm diğer sunucular;
* bilinen tüm kullanıcı bilgileri;
* bilinen tüm kanal bilgileri.

Sunucuları ilgilendiren bilgiler ekstra SERVER mesajları ile, kullanıcıları ilgilendiren bilgiler NICK/USER/MODE/JOIN mesajları ile ve kanalları ilgilendiren bilgiler MODE mesajları ile gönderilir.

NOT: Kanal başlığı bilgileri paylaşılmaz çünkü TOPIC komutu herhangi eski bir başlık bilgisinin üstüne yazılır, yani olsa olsa bağlantının iki tarafı başlık bilgilerini değiştokuş edebilir.

Sunucular ile ilgili durum bilgileri iletilirken, sunucular ile ilgili hali hazırda var olan çakışmalar nick çakışmalarından daha önce gerçekleşir. IRC ağının çevrimsiz bir grafiğe sahip olmasından dolayı ağın başka bir yerde tekrardan bağlanmış olması mümkündür, ve çakışmanın oluştuğu yer ağın nereden ayrılması gerektiğini gösterir.

* 8.7 Sunucu-İstemci Bağlantılarının Sonlandırılması

Bir kullanıcının bağlantısı sona erdiğinde, kullanıcının bağlı bulunduğu sunucu tarafından kullanıcı adına bir QUIT mesajı oluşturulur. Başka bir mesaj oluşturulmaz ya da kullanılmaz.

* 8.8 Sunucu-Sunucu Bağlantılarının Sonlandırılması

Eğer bir sunucu-sunucu bağlantısı bir SQUIT ya da doğal nedenlerde koparsa, ağın geri kalanı kopmanın sebebini tespit eden sunucu tarafından bilgilendirilir. Sunucu daha sonra bir SQUIT listesi (bağlantısı kopan sunucular için) ve bir QUIT listesi (bağlantısı kopan kullanıcılar için) oluşturur.

* 8.9 Nick Değişikliklerinin Takibi

Tüm IRC sunucuları yakın zamanda yapılmış olan nick değişikliklerinin bir kaydını tutar. Bu durum sunucuların nick değişikliği sebebiyle oluşan tür durumlarını takip edebilmesi ve hangi komutların kullanılacağına karar vermesi için gereklidir. Nick değişikliklerini izlemesi gereken komutlar aşağıdaki gibidir:

* KILL (nickin bağlantısı kesilir)
* MODE (+/- o,v)
* KICK (nick kanaldan uzaklaştırılır)

Nick değişikliklerini izlemesi gereken başka bir komut yoktur.

Yukarıdaki durumlarda sunucu önce nickin varlığını kontrol eder, daha sonra geçmişine bakar ve nickin şu anda kime ait olduğunu (eğer birine aitse) belirler. Bu çakışma durumlarının olasılığını düşürür ancak sunucunun yanlış kullanıcıyı seçmesi ile yine de oluşabilirler. Yukarıdaki komutların herhangi biri ile bir değişiklik takip edilecekse bir zaman dilimi belirlenmesi ve çok eski girdilerin dikkate alınmaması önerilir.

Uygun bir geçmiş kaydı için sunucunun, eğer hepsi değiştirmeye karar verdi ise, tanıdığı her kullanıcı için bir önceki nick kaydını tutabiliyor olması gerekir. Bu boyut hafıza vb. diğer faktörlerden etkilenir.

* 8.10 İstemcilerin Flood Kontrolü

Büyük bir IRC ağında, herhangi bir kullanıcının ağı aşırı mesaj gönderimi ile yavaşlatması ve diğer kullanıcıların aldığı hizmet kalitesini düşürmesi mümkündür. Her 'kurban'ın kendini korumasını beklemek yerine, sunucular dışında tüm kullanıcılar için geçerli olacak bir flood koruması yazılmıştır. Güncel algoritma aşağıdaki gibidir:

* Kullanıcının mesaj zamanlayıcısının güncel zamandan daha az olup olmadığı kontrol edilir (eğer öyle ise eşitlenir);
* Kullanıcıdan gelen her veri okunur;
* Eğer zamanlayıcı güncel zamanın 10 saniyeden daha az bir şekilde ilerisindeyse, mevcut tüm mesajlar ayrıştırılır ve kullanıcı her mesaj için 2 saniye ile cezalandırılır; yani kullanıcı her iki saniyede 1 mesaj gönderebilir.

* 8.11 Tıkanmasız Aramalar

Eşzamanlı bir çevrede, sunucunun her kullanıcıya eşit biçimde hizmet verebilmesi için işlemlerde mümkün olan en az gecikmenin olması önemlidir. Bu da tüm ağ okuma/yazma işlemlerinde tıkanmasız IO (Input-Output (Girdi-Çıktı)) kullanılmasını gerektirir. Normal sunucu bağlantılarında bu zor değildi ancak sunucunun bloke olmasına sebep olan diğer destek operasyonları (disk okuma gibi) vardır. Bu gibi işlemler mümkün olduğunca kısa zaman aşımı sürelerinde yapılmalıdır.

** 8.11.1 Hostname (DNS) aramaları

Berkeley ve diğerlerinden standart çözücü kütüphanelerini kullanmak bazı durumlarda büyük gecikmelere ve zaman aşımlarına sebep olmuştur. Bundan kaçınmak için, tıkanmasız girdi-çıktı operasyonları için hazırlanan ve daha sonra ana sunucu girdi-çıktı döngüsü tarafından seçilen ayrı DNS rutinleri yazılmıştır.

** 8.11.2 Username (Ident) aramaları

Kullanım ve diğer programlara dahil edilmek üzere birçok ident kütüphanesi vardır ancak bunlar senkronize bir şekilde işlendiği ve sıklıkla gecikmelere sebep olduğu için problem çıkarmıştır. Çözüm yine sunucunun geri kalanı ile ortak çalışacak ve tıkanmasız girdi-çıktı sistemi kullanacak ayrı bir rutinin yazılması ile bulunmuştur.

* 8.12 Konfigürasyon Dosyası

Sunucuyu kurmak ve işletmek için esnek bir yöntem sağlamak için, her konfigürasyon dosyasının aşağıdaki kullanım talimatlarına göre kullanılması önerilir:

* hangi host'lardan kullanıcı bağlantısı kabul edileceği;
* hangi host'lardan sunucu bağlantısı kabul edileceği;
* hangi host'lardan her iki bağlantıya da izin verileceği (aktif ve pasif);
* sunucu ile ilgili yer bilgileri (üniversite, şehir/eyalet, şirket vb buna örnek gösterilebilir);
* sunucudan kimin sorumlu olduğu ve iletişim kurmak için bir mail adresi;
* kısıtlı operatör komutlarına erişmek isteyen kullanıcılar için host ismi ve şifreler.

Host isimleri belirlenirken, hem alan isimleri hem de 'nokta'ların kullanımı (127.0.0.1) kabul edilmelidir. Şifrelerin hem giriş hem de çıkış bağlantıları için kullanılabilir ve kabul edilebilir olacak şekilde belirlenmesi gerekir. (tek çıkış bağlantısı sunucular ile olan bağlantılardır.)

Yukarıdaki liste herhangi bir sunucunun diğeri ile bağlantı kurması için yerine getirmesi gereken minimum gerekliliklerdir. Diğerleri aşağıdaki gibidir:

* diğer sunucunun hangi sunucuları tanıtabileceğini belirleme;
* sunucu bölümlerinin ne kadar genişleyebileceğini belirleme;
* kullanıcıların hangi saatlerde bağlanabileceğini belirleme.

** 8.12.1 Kullanıcıların bağlanmasına izin verme

Bir sunucu başlangıçta okunan ve kullanıcıların bağlanmak için hangi host'ları kullanacağını belirleyen bir çeşit 'erişim kontrol listesi' (konfigürasyon dosyasında ya da başka bir yerde) kullanmalıdır.

Host erişim kontrolü için esneklik sağlamak adına hem 'kabul et' hem de 'reddet' seçenekleri uygulanmalıdır.

** 8.12.2 Operatörler

Uygunsuz bir insana operatör ayrıcalıkları tanımak IRC ağının düzeni için yıkıcı sonuçlara sebep olabilir. Bu yüzden bu tür güçlerin elde edilmesi çok kolay olmamalıdır. Güncel ayarlar iki adet şifre gerektirir, ancak bunlardan biri genellikle kolayca tahmin edilebilir. Oper şifrelerinin konfigürasyon dosyasında saklanması ve kolayca çalınmasını önlemek için crypt(3) gibi gizlenmiş bir formatta saklanması tercih edilir.

** 8.12.3 Sunucuların bağlanmasına izin verme

Bir sunucu için çoklu bağlantı önemli bir durum değildir, ancak kötü bir bağlantı IRC'nin kullanışlılığı açısından büyük bir etki yaratabilir. Bu yüzden her sunucunun bağlanabileceği ve kendisine bağlanmasına izin vereceği bir sunucu listesi bulunması gerekir. Bir sunucu hiçbir durumda kendisine bilinmeyen bir bağlantıdan sunucu bağlantısı kurulmasına izin vermemelidir. Hangi sunucuların bağlanabileceği ve bağlanamayacağına ek olarak, konfigürasyon dosyasında ayrıca link'ler ile ilgili şifre ve diğer özelliklerin de bulunması gerekir.

** 8.12.4 Administrivia

ADMIN komutuna eksiksiz ve geçerli cevaplar sağlamak için (bkz: 4.3.7) sunucunun konfigürasyon dosyasında gerekli detayların bulunması gerekir.

* 8.13 Kanal Üyeliği

Şimdiki protokol kayıtlı herhangi bir lokal kullanıcının 10 adete kadar farklı kanala katılabilmesine izin verir. Lokal olmayan kullanıcılar için böyle bir kısıtlama yoktur.


9. MEVCUT PROBLEMLER

Bu protokol ile ilgili tanımlanmış birkaç problem vardır, yakın bir gelecekte protokolün yeniden yazılması ile bu sorunların çözüleceği umulmaktadır. Şu anda bu problemlerin çözülmesi ile ilgili çalışmalar yapılmaktadır.

* 9.1 Ölçeklenirlik

Protokolün geniş bir alanda kullanıldığında yeteri derecede ölçeklenmediği görülmüştür. Ana problem tüm sunucuların diğer sunucular ve onların kullanıcıları ile ilgili detayları bilmek durumunda olması ve bu bilgilerin değiştiği anda güncellenmesi gerekmesinden çıkar. Bağlı bulunan sunucu sayısının düşük tutulması ve iki nokta arasındaki uzaklığın mümkün olan en kısa duruma getirilmesi bu sorunun bir nebze önüne geçebilir.

* 9.2 Etiketler

Güncel IRC protokolü 3 çeşit etiket içerir: nick, kanal ismi ve sunucu ismi. Her bir çeşit kendine ait alan sahibidir ve o alan içinde herhangi bir ikiliğe izin verilmez. Şu anda kullanıcıların bu üçünden herhangi biri için etiket seçmesi mümkündür ve bu da çakışmalara sebep olur. Bu durum nick ve kanallar için birbirleri ile çakışmayan özgün isimler belirlenmesini sağlayacak bir plan oluşturulması gerektiğini göstermektedir.

** 9.2.1 Nickler

IRC üzerinde nick fikri kullanıcıların kanal dışında sohbet ederken kullanmaları için çok uygundur, ama sadece kısıtlı bir nick alanı vardır ve birden fazla kişinin aynı nicki kullanmak istemesi yaygın bir durumdur. Eğer aynı nick bu protokolü kullanan iki kişi tarafından seçilirse, ya bir taraf başarılı olamayacak ya da her iki tarafın da bağlantısı KILL ile kesilecektir. (bkz: 4.6.1)

** 9.2.2 Kanallar

Mevcut kanal düzeni tüm sunucuların tüm kanalları, kanallardaki kullanıcıları ve özelliklerini bilmesini gerektirir. İyi ölçeklenir olmamasının yanında gizlilik durumu da söz konusudur. Bir kanal çakışması, nick çakışmasının aksine kapsamlı bir durum olarak değerlendirilir. (Yeni kanalı oluşturan ve o kanalda bulunan tüm kullanıcıları kapsar)

** 9.2.3 Sunucular

Sunucuların sayısı kanallar ve nicklerin sayısı ile karşılaştırıldığında genellikle daha düşük olsa da, ikisinin de ayrı olarak ya da bir mask aracılığıyla global olarak bilinmesi gerekir.

* 9.3 Algoritmalar

Bir grup kullanıcının kanal listesini kontrol etme gibi komutlar sunucuya kodlanırken, N^2 algoritması kullanılmak zorundadır.

Güncel sunucu versiyonlarında herhangi bir veritabanı tutarlılığı kontrolü yoktur. Her sunucu komşu sunucunun doğru çalıştığını varsayar. Bu eğer bağlantı kuran sunucuda sorun varsa büyük problemlerin oluşmasına zemin hazırlar.

Lokal ve global özgün etiketlerin eksikliği yüzünden birçok tür sorunu mevcuttur. Bu durumlar genellikle mesajların IRC'ye ulaşması konusu ve bunun IRC ağı üzerindeki ters etkileri ile alakalıdır. Özgün etiketlere geçilse bile kötüye kullanılan kanal komutları ile ilgili problemler devam etmektedir.


10. MEVCUT DESTEK VE KULLANILIRLIK

IRC ile ilgili sorularınız için adres listesi:
Gelecek protokol:
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

Genel tartışma:
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Yazılım uygulamaları:
cs.bu.edu:/irc
nic.funet.fi:/pub/irc
coombs.anu.edu.au:/pub/irc

Haber Grubu: alt.irc


11. GÜVENLİK DURUMLARI

Güvenlik konuları 4.1, 4.1.1, 4.1.3, 5.5 ve 7. bölümlerde anlatılmıştır.


12. YAZARLARIN ADRESLERİ

Jarkko Oikarinen
Tuirantie 17 as 9
90500 OULU
FINLAND

Email:
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.



Darren Reed
4 Pateman Street
Watsonia, Victoria 3087
Australia

Email: avalon@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]mbs.anu.edu.au
  Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
radyo44.com.tr
Alt 02 Nisan 2012, 08:43   #2
Çevrimdışı
Cevap: Türkçe RFC 1459 (Tam Çeviri)




Son zamanlarda Help dünyası adına yapılan en yararlı proje. Emeği geçen arkadaşlarıma teşekkür ederim.

  Alıntı ile Cevapla

Alt 16 Nisan 2012, 16:17   #3
Çevrimdışı
Cevap: Türkçe RFC 1459 (Tam Çeviri)




Emegine sağlık okuyan için süper bir bilgi.

  Alıntı ile Cevapla

Alt 16 Nisan 2012, 18:27   #4
Çevrimdışı
Cevap: Türkçe RFC 1459 (Tam Çeviri)




Gerçekten çok kullanışlı olmuş. Emeğin için teşekkürler.

  Alıntı ile Cevapla

Alt 16 Nisan 2012, 19:19   #5
Çevrimdışı
Cevap: Türkçe RFC 1459 (Tam Çeviri)




emeği geçenler @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] ve @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] arkadaşlar, sizlerin adına tekrar teşekkürlerimi sunuyorum.

  Alıntı ile Cevapla

Alt 02 Mayıs 2012, 01:20   #6
Çevrimdışı
Cevap: Türkçe RFC 1459 (Tam Çeviri)




Gerek emeği geçen gerekse bizlere bu paylasimi yapan deep'e arkadasimiza teşekkürler..

  Alıntı ile Cevapla

Alt 02 Mayıs 2012, 23:14   #7
Çevrimdışı
Cevap: Türkçe RFC 1459 (Tam Çeviri)




Help yaşamını ve helper olgusunu hayatta tutmaya çalışan arkadaşların tümü; Ne güzel insan ne güzel helperdir
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

  Alıntı ile Cevapla

Alt 03 Mayıs 2012, 11:00   #8
Çevrimdışı
Cevap: Türkçe RFC 1459 (Tam Çeviri)




@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]cim emeğine sağlık canım, hakikaten en ince ayrıntısına kadar dikkat edilmiş, burham burham emek kokan çok güzel bir çalışma... Senden başkasıda yapamazdı bunu zaten
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

  Alıntı ile Cevapla

Alt 04 Mayıs 2012, 17:29   #9
Çevrimdışı
Cevap: Türkçe RFC 1459 (Tam Çeviri)




@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] 'e soruyorum " ne yapiyorsun?" diye, bana " çeviri yapiyorum " diyor. Okuduğu bölümde ingilizce üzerine olduğundan bende sanıyorum ödevi filan
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
) Çok güzel bir paylaşım gerçekten emeğine sağlık @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] .

  Alıntı ile Cevapla

Alt 04 Mayıs 2012, 23:00   #10
Çevrimdışı
Cevap: Türkçe RFC 1459 (Tam Çeviri)




@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] sagol canim benim (: Yararli olabildiysek ne mutlu.

@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] ne demek efendim rica ederim, sizlere feda olsun o emek (((: (Bu arada 1 dakikan var, sen anladin.)

  Alıntı ile Cevapla

Cevapla

Etiketler
ceviri

Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Türkçe Çeviri Zor Mu? Ruj Türkçe 0 13 Aralık 2010 10:54
Türkçe Japonça çeviri MuhammetDUMAN Genel Paylaşım 0 22 Nisan 2008 19:54