LoginSignup
0
0

RFC2812 Internet Relay Chat: Client Protocolを読んでみた。(5.1 Command responses)

Posted at

はじめに

どうも。こんにちは。
42tokyoといったところで、簡単なIRCサーバの実装を行なっています。

今回は、5.1 Command responsesを読み、サーバの返信メッセージについて学んで行きたいと思います。

間違い等があれば、ご指摘ください。

5. Replies

  • この章では、3. Message Datails4. Optional featuresで出てくるコマンドへの応答として生成されるnumeric repliesについて説明する
  • 各数字には、番号、名前、返信文字列が与えられている

5.1 Command responses

  • 001〜099の数値は、クライアントとサーバー間でのみ使用され、サーバー間での通信では使用しない
  • 200〜399の数値は、コマンドへの応答として生成される

001 ~ 004

001 RPL_WELCOME

"Welcome to the Internet Relay Network <nick>!<user>@<host>"

002 RPL_YOURHOST

"Your host is <servername>, running version <ver>"

003 RPL_CREATED

"This server was created <date>"

004 RPL_MYINFO

"<servername> <version> <available user modes> <available channel modes>"

  • サーバは、ユーザ登録に成功すると、001から004をユーザに送信する

005

005 RPL_BOUNCE

"Try server <server name>, port <port number>"

  • サーバがユーザに送る
  • サーバに接続可能なクライアント数の上限に達し、新たなクライアントの接続を拒否するときに送ることが多い
  • 代替サーバを提案するメッセージが付く

302

302 RPL_USERHOST

":*1<reply> *( " " <reply> )"

※ 今のところ使用していないので、解説は省略

303

303 RPL_ISON

":*1<nick> *( " " <nick> )"

※ 今のところ使用していないので、解説は省略

301, 305, 306

301 RPL_AWAY

"<nick> :<away message>"

305 RPL_UNAWAY

":You are no longer marked as being away"

306 RPL_NOWAWAY

":You have been marked as being away"

  • 301から306のリプライは、AWAYコマンドとともに使用される(許可されていれば)
  • RPL_AWAYは、離席中のクライアントにPRIVMSGを送るクライアントに送られる
  • RPL_AWAYは、クライアントが接続しているサーバからのみ送られる
  • RPL_UNAWAYとRPL_NOWAWAYは、クライアントがAWAYメッセージを削除して設定するときに送られる

311 ~ 313, 317 ~ 319

311 RPL_WHOISUSER

"<nick> <user> <host> * :<real name>"

312 RPL_WHOISSERVER

"<nick> <server> :<server info>"

313 RPL_WHOISOPERATOR

"<nick> :is an IRC operator"

317 RPL_WHOISIDLE

"<nick> <integer> :seconds idle"

318 RPL_ENDOFWHOIS

"<nick> :End of WHOIS list"

319 RPL_WHOISCHANNELS

"<nick> :*( ( "@" / "+" ) <channel> " " )"

※ 今のところ使用していないので、解説は省略

314, 369

314 RPL_WHOWASUSER

"<nick> <user> <host> * :<real name>"

369 RPL_ENDOFWHOWAS

"<nick> :End of WHOWAS"

※ 今のところ使用していないので、解説は省略

321 ~ 323

321 RPL_LISTSTART

廃止。使用されていない。

322 RPL_LIST

"<channel> <# visible> :<topic>"

323 RPL_LISTEND

":End of LIST"

  • RPL_LIST、RPL_LISTENDは、LISTコマンドに対するリプライとして送信するデータと、そのデータの終了を表す
  • 返せるchannelがない場合は、RPL_LISTENDだけを送らなければならない [MUST]

325, 324, 331, 332

325 RPL_UNIQOPIS

"<channel> <nickname>"

324 RPL_CHANNELMODEIS

"<channel> <mode> <mode params>"

331 RPL_NOTOPIC

"<channel> :No topic is set"

332 RPL_TOPIC

"<channel> :<topic>"

  • RPL_NOTOPICとRPL_TOPICは、TOPICコマンドのリプライとして使用する
    (TOPICコマンドとは、チャンネルのトピックを決めるために使用する)
  • トピックが設定されていれば RPL_TOPIC を返す。そうでなければ RPL_NOTOPIC を返す

341

341 RPL_INVITING

"<channel> <nick>"

  • INVITEメッセージが成功したこと、INVITEメッセージがエンドクライアントに渡されたことを示すために、サーバがINVITEメッセージの送信者(招待者)に返す

342

342 RPL_SUMMONING

"<user> :Summoning user to IRC"

※ 今のところ使用していないので、解説は省略

346, 347

346 RPL_INVITELIST

"<channel> <invitemask>"

347 RPL_ENDOFINVITELIST

"<channel> :End of channel invite list"

  • 与えられた<channel>の<invitemask>をリストするとき、サーバは、RPL_INVITELISTとRPL_ENDOFINVITELISTメッセージを使用してリストを送り返すことが要求される
  • サーバは、active mask毎にRPL_INVITELISTを作成し返す
  • リストの最後、または存在しない場合、サーバは、RPL_ENDOFINVITELISTを返す [MUST]

348, 349

348 RPL_EXCEPTLIST

"<channel> <exceptionmask>"

349 RPL_ENDOFEXCEPTLIST

"<channel> :End of channel exception list"

  • 与えられた<channel>の<exceptionmask>をリストするとき、サーバは、RPL_EXCEPTLISTとRPL_ENDOFEXCEPTLISTメッセージを使用してリストを送り返すことが要求される
  • サーバは、active mask毎にRPL_EXCEPTLISTを作成し返す
  • リストの最後、または存在しない場合、サーバは、RPL_ENDOFEXCEPTLISTを返す [MUST]

351

351 RPL_VERSION

"<version>.<debuglevel> <server> :<comments>"

352, 315

352 RPL_WHOREPLY

"<channel> <user> <host> <server> <nick> ( "H" / "G" > ["*"] [ ( "@" / "+" ) ] :<hopcount> <real name>"

315 RPL_ENDOFWHO

"<name> :End of WHO list"

※ 今のところ使用していないので、解説は省略

353

353 RPL_NAMREPLY

"( "=" / "*" / "@" ) <channel> :[ "@" / "+" ] <nick> *( " " [ "@" / "+" ] <nick> )

  • NAMESメッセージへのリプライとして使用する
  • サーバは、RPL_NAMREPLYとRPL_ENDOFNAMESのペアをクライアントに返す
  • prefixと対応するchannelの種類は、以下の通り
    • 「"@"」は、秘密チャンネル(secret channels)
    • 「"*"」は、プライベート・チャンネル(private channels)
    • 「"="」は、それ以外のパブリック・チャンネル(public channels)

366

366 RPL_ENDOFNAMES

"<channel> :End of NAMES list"

  • NAMESメッセージへのリプライとして使用する
  • サーバは、RPL_NAMREPLYとRPL_ENDOFNAMESのペアをクライアントに返す
  • <channel>が見つからない場合、サーバはRPL_ENDOFNAMESだけを返す
  • 上記の例外として、NAMESメッセージがパラメータなしで送信され、すべてのvisible channelとコンテンツに関するリプライを送り返す場合が挙げられる

364, 365

364 RPL_LINKS

"<mask> <server> :<hopcount> <server info>"

365 RPL_ENDOFLINKS

"<mask> :End of LINKS list"

※ 今のところ使用していないので、解説は省略

367, 368

367 RPL_BANLIST

"<channel> <banmask>"

368 RPL_ENDOFBANLIST

"<channel> :End of channel ban list"

  • <channel>のアクティブな<banmask>をリストアップするとき、サーバは、RPL_BANLISTとRPL_ENDOFBANLISTメッセージを使用してリストを返す
  • アクティブな<banmask>毎に、RPL_BANLISTメッセージを作成する
  • <banmask>がリストされた後(または存在しない場合)、サーバは、RPL_ENDOFBANLISTを送信しなければならない [MUST]

371, 374

371 RPL_INFO

":<string>"

374 RPL_ENDOFINFO

":End of INFO list"

※ 今のところ使用していないので、解説は省略

375, 372, 376

375 RPL_MOTDSTART

":- <server> Message of the day - "

372 RPL_MOTD

":- <text>"

376 RPL_ENDOFMOTD

":End of MOTD command"

※ 今のところ使用していないので、解説は省略

381

381 RPL_YOUREOPER

":You are now an IRC operator"

  • OPERメッセージが成功し、オペレータステータスを得たクライアントに返す

382

382 RPL_REHASHING

"<config file> :Rehashing"

※ 今のところ使用していないので、解説は省略

383

383 RPL_YOURESERVICE

"You are service <servicename>"

※ 今のところ使用していないので、解説は省略

391

391 RPL_TIME

"<server> :<string showing server's local time>"

※ 今のところ使用していないので、解説は省略

392 ~ 395

392 RPL_USERSSTART

":UserID Terminal Host"

393 RPL_USERS

":<username> <ttyline> <hostname>"

394 RPL_ENDOFUSERS

":End of users"

395 RPL_NOUSERS

":Nobody logged in"

※ 今のところ使用していないので、解説は省略

200 ~ 210, 261, 262

200 RPL_TRACELINK

"Link <version & debug level> <destination> <next server> V<protocol version> <link uptime in seconds> <backstream sendq> <upstream sendq>"

201 RPL_TRACECONNECTING

"Try. <class> <server>"

202 RPL_TRACEHANDSHAKE

"H.S. <class> <server>"

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 <server> <nick!user|*!*>@<host|server> V<protocol version>"

207 RPL_TRACESERVICE

"Service <class> <name> <type> <active type>"

208 RPL_TRACENEWTYPE

"<newtype> 0 <client name>"

209 RPL_TRACECLASS

"Class <class> <count>"

210 RPL_TRACERECONNECT

Unused.

261 RPL_TRACELOG

"File <logfile> <debug level>"

262 RPL_TRACEEND

"<server name> <version & debug level> :End of TRACE"

※ 今のところ使用していないので、解説は省略

211

211 RPL_STATSLINKINFO

"<linkname> <sendq> <sent messages> <sent Kbytes> <received messages> <received Kbytes> <time open>"

※ 今のところ使用していないので、解説は省略

212

212 RPL_STATSCOMMANDS

"<command> <count> <byte count> <remote count>"

※ 今のところ使用していないので、解説は省略

219, 242

219 RPL_ENDOFSTATS

"<stats letter> :End of STATS report"

242 RPL_STATSUPTIME

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

※ 今のところ使用していないので、解説は省略

243

243 RPL_STATSOLINE

"O <hostmask> * <name>"

※ 今のところ使用していないので、解説は省略

221

221 RPL_UMODEIS

"<user mode string>"

  • クライアント自身のモードに関する問い合わせへの返答を意味する値

234, 235

234 RPL_SERVLIST

"<name> <server> <mask> <type> <hopcount> <info>"

235 RPL_SERVLISTEND

"<mask> <type> :End of service listing"

※ 今のところ使用していないので、解説は省略

251 ~ 255

251 RPL_LUSERCLIENT

":There are <integer> users and <integer> services on <integer> servers"

252 RPL_LUSEROP

"<integer> :operator(s) online"

253 RPL_LUSERUNKNOWN

"<integer> :unknown connection(s)"

254 RPL_LUSERCHANNELS

"<integer> :channels formed"

255 RPL_LUSERME

":I have <integer> clients and <integer> servers"

※ 今のところ使用していないので、解説は省略

256 ~ 259

256 RPL_ADMINME

"<server> :Administrative info"

257 RPL_ADMINLOC1

":<admin info>"

258 RPL_ADMINLOC2

":<admin info>"

259 RPL_ADMINEMAIL

":<admin info>"

※ 今のところ使用していないので、解説は省略

263

263 RPL_TRYAGAIN

"<command> :Please wait a while and try again."

※ 今のところ使用していないので、解説は省略

5.3 Reserved numerics

  • 本節では、以下の理由から上記で解説されていないリプライナンバーを取り上げる
    • もう使用されていない
    • 将来的に使用する予定がある
    • 現在使用されているが、一般的ではない
231 RPL_SERVICEINFO
232 RPL_ENDOFSERVICES
233 RPL_SERVICE
300 RPL_NONE
316 RPL_WHOISCHANOP
361 RPL_KILLDONE
362 RPL_CLOSING
363 RPL_CLOSEEND
373 RPL_INFOSTART
384 RPL_MYPORTIS
213 RPL_STATSCLINE
214 RPL_STATSNLINE
215 RPL_STATSILINE
216 RPL_STATSKLINE
217 RPL_STATSQLINE
218 RPL_STATSYLINE
240 RPL_STATSVLINE
241 RPL_STATSLLINE
244 RPL_STATSHLINE
244 RPL_STATSSLINE
246 RPL_STATSPING
247 RPL_STATSBLINE
250 RPL_STATSDLINE

12.Full Copyright Statement

Copyright (C) The Internet Society (2000). All Rights Reserved.

This document and translations of it may be copied and furnished to others,
and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are included on
all such copies and derivative works.
However, this document itself may not be modified in any way,
such as by removing the copyright notice or references to the Internet Society
or other Internet organizations, except as needed for the purpose of developing
Internet standards in which case the procedures for copyrights defined in
the Internet Standards process must be followed, or as required to
translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by
the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and
THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement

Funding for the RFC Editor function is currently provided by the Internet Society.

さいごに

だいぶ、それっぽいものができてきました。

解説のないリプライナンバーについては、徐々に追加していこうと思います。
ありがとうございました!

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0