(Local only) IRC server compatible with RFC1459, written in C++ with Boost library
C++
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitattributes
.gitignore
Channel_info.cpp
Channel_info.hpp
Channels_manager.cpp
Channels_manager.hpp
Configuration.hpp
Connection.cpp
Connection.hpp
Debug_log.hpp
Doxyfile
LICENCE
Prefix_wrapper.cpp
Prefix_wrapper.hpp
README.md
Reply_generator.cpp
Reply_generator.hpp
Request_handler.cpp
Request_handler.hpp
Request_parser.cpp
Request_parser.hpp
Sanity_check.cpp
Sanity_check.hpp
Server.cpp
Server.hpp
User_info.cpp
User_info.hpp
Users_manager.cpp
Users_manager.hpp
irc_logo.png
main.cpp
makefile
motd.txt
run_server.bat
run_server.sh

README.md

Simple but powerful (local only) IRC server written in C++ using Boost

by SkyWodd

Written for a homework from my computer science school. Not a real project, just a "code and forget" project for school.

Designed to be :

  • multi-platform (using Boost libraries)
  • single-threaded (I'm too lazy to add multi-threading)
  • (at most) errors safe
  • RFC1495 compatible, BUT NOT TOTALY (Deadline too close to implement correctly all commands)

Compilation remarks

This program require Boost with Asio.signal (>= 1_47) to have signals support ! If compiled with an older version of Boost signals support will be automaticaly disabled.

Coded, tested, compiled and debugged on Windows 7 with Boost 1_51 using Eclipse Juno.


Supported IRC commands

Command - Support - Comment (if any)

  • PASS - full - Does not make difference between client and server PASS
  • NICK - half - No nickname collision check (TODO)
  • USER - full - Ignore host name and server name (set at connection)
  • SERVER - no - Always answer with ERR_ALREADYREGISTRED
  • OPER - half - ERR_NOOPERHOST not supported
  • QUIT - full -
  • SQUIT - no - Always answer with ERR_NOPRIVILEGES
  • JOIN - half - No multiple channel / key arguments support
  • PART - full -
  • MODE - TODO - TODO
  • TOPIC - full -
  • NAMES - half - Does not support "all channels" listing
  • LIST - half - Does not support "all channels" listing
  • INVITE - full -
  • KICK - half - Does not support extended KICK format
  • VERSION - full -
  • STATS - TODO - TODO
  • LINKS - no - Always answer with RPL_ENDOFLINKS
  • TIME - full -
  • CONNECT - no - Always answer with ERR_NOPRIVILEGES
  • TRACE - no - Do nothing
  • ADMIN - full -
  • INFO - full -
  • WHO - TODO - TODO
  • WHOIS - TODO - TODO
  • WHOAS - no - Always answer with ERR_WASNOSUCHNICK
  • NOTICE - full -
  • PRIVMSG - full -
  • KILL - half - ERR_CANTKILLSERVER not supported
  • PING - full - Does not answer to request with deamon 2 != local server domain
  • PONG - full -
  • ERROR - no - Do nothing
  • AWAY - full -
  • REHASH - half - Supported but no configuration file used yet (TODO)
  • RESTART - full - Stop server, service must be restarted by an external launcher
  • SUMMON - half - Always answer with ERR_SUMMONDISABLED
  • USERS - half - Always answer with ERR_USERSDISABLED
  • WALLOPS - full - Need to be IRC ops to send wallops (avoid denial of service from regular users)
  • USERHOST - full -
  • ISON - full -

Remarks about the makefile

The makefile compile with -O0 -g options but store the binary in the "release" directory, it's NOT a mistake ! The final executable have to be compiled with these options for my school subject.

The code compile without problems on a debian squeeze. If you are compiling on windows, or if you want to customize the build process : just open the makefile in the root directory of the project and uncomment lines in it.