This project was carried out as part of the School 42 Common Core. The aim of this project is to discover the IRC protocol and to create our own IRC server using c++98.
Author | GitHub profile |
---|---|
Samuel Vanmeenen Bachelard (svanmeen) | @Lyptis |
Camille Bernot (cbernot) | @RhesusP |
- Take a port and a password as parameters.
- The server must handle several clients at the same time without being blocked.
- Multi-threading is not allowed.
- Server must use only one
poll
- Communication between the server and clients must be done using TCP/IP sockets.
- User must be able to set a nickname and a username, join a channel, send and receive messages (public or private).
- Server must be able to handle several channels.
- Regular users and channel operators must be implemented.
- The following commands must be implemented :
KICK
,INVITE
,TOPIC
andMODE
(with modesi
,t
,k
,o
andl
). - Server must be able to receive partial messages.
Command | Description |
---|---|
PASS |
Set a connection password to begin the registration process |
USER |
Specify a username and realname of a new user during registration process |
NICK |
Set the user a nickname (or change the previous one) |
MOTD |
Display the Message Of The Day of the server |
JOIN |
Join one or several channels |
KICK |
Force remove a user from a channel |
MODE |
Display or set channel mode : - +k set a password to the channel- -k remove the password- +i set the channel as invite-only- -i remove the invite-only restriction- +t protect the channel topic- -t remove topic protection- +o give channel operator privileges to a user- -o remove channel operator privileges to a user- +l set a user limit- -l remove the user limit |
TOPIC |
Display of set the channel topic |
INVITE |
Invite a user to a channel |
PART |
Remove the user from the given channel(s) |
QUIT |
Terminate client's connection to the server |
PRIVMSG |
Send a message to a user or a channel |
WHO |
Display infos about users |
PING |
Check that the server is still connected to the client |
BOT |
Activate or deactivate a bot that greets users in a channel |
make && ./ircserv <port> <password>
- Internet Relay Chat Protocol (RFC1459)
- Internet Relay Chat: Architecture (RFC2810)
- Internet Relay Chat: Channel Management (RFC2811)
- Internet Relay Chat: Client Protocol (RFC2812)
- RFC1459 (French version)
- Internet Relay Chat: Server Protocol (RFC2813)
- Default Port for Internet Relay Chat (IRC) via TLS/SSL (RFC7194)
- The UChicago X-Projects
- ircdocs.horse
- Guide to Network Programming