diff --git a/srcs/main.cpp b/srcs/main.cpp index e7ff0d8..ed83f12 100644 --- a/srcs/main.cpp +++ b/srcs/main.cpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/20 09:27:04 by maldavid #+# #+# */ -/* Updated: 2024/01/30 00:43:49 by maldavid ### ########.fr */ +/* Updated: 2024/01/30 17:16:04 by vvaas ### ########.fr */ /* */ /******************************************************************************/ @@ -23,8 +23,8 @@ static irc::Server* serv_ptr = NULL; void signalsHandler(int foo) { (void)foo; - if(!serv_ptr) - return; + if (!serv_ptr) + return ; serv_ptr->closeMainSocket(); std::cout << "\b\b \b\b" << std::flush; irc::logs::report(irc::log_message, "Shutting down..."); @@ -32,17 +32,17 @@ void signalsHandler(int foo) int main(int ac, char** av) { - if(ac != 3) + if (ac != 3) { irc::logs::report(irc::log_message, "usage './ircserv ', try again dumbass"); return 0; } - if(av[1] == NULL || av[2] == NULL) + if (av[1] == NULL || av[2] == NULL) irc::logs::report(irc::log_fatal_error, "invalid argv, argv[1] or argv[2] is NULL (wtf)"); char* end; int port = std::strtol(av[1], &end, 10); - if(errno == ERANGE || *end != 0 || port < 0 || port > 0xFFFF || std::strlen(av[1]) == 0) + if (errno == ERANGE || *end != 0 || port < 0 || port > 0xFFFF || std::strlen(av[1]) == 0) irc::logs::report(irc::log_fatal_error, "invalid port"); irc::Server serv(port, av[2]); diff --git a/srcs/server.cpp b/srcs/server.cpp index 5ae2cd2..1f1f833 100644 --- a/srcs/server.cpp +++ b/srcs/server.cpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/21 09:31:17 by maldavid #+# #+# */ -/* Updated: 2024/01/30 17:15:03 by vvaas ### ########.fr */ +/* Updated: 2024/01/30 17:15:37 by vvaas ### ########.fr */ /* */ /******************************************************************************/ diff --git a/srcs/server_functions.cpp b/srcs/server_functions.cpp index 9db6ca1..3df0bc3 100644 --- a/srcs/server_functions.cpp +++ b/srcs/server_functions.cpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/22 17:31:06 by maldavid #+# #+# */ -/* Updated: 2024/01/30 16:59:42 by vvaas ### ########.fr */ +/* Updated: 2024/01/30 17:15:46 by vvaas ### ########.fr */ /* */ /******************************************************************************/ @@ -41,15 +41,15 @@ namespace irc client->sendCode(ERR_NONICKNAMEGIVEN, "No nickname given"); return; } - if(msg.getTokens().size() != 2 && msg.getTokens().size() != 3) + if (msg.getTokens().size() != 2 && msg.getTokens().size() != 3) { logs::report(log_error, "NICK, invalid command '%s'", msg.getRawMsg().c_str()); return; } const std::string& nickname = msg.getTokens()[1]; - for(client_it it = _client.begin(); it != _client.end(); ++it) + for (client_it it = _client.begin(); it != _client.end(); ++it) { - if((*it)->getNickName() == nickname) + if ((*it)->getNickName() == nickname) { client->sendCode(ERR_NICKCOLLISION, nickname + " Nickname is used"); client->kill("Nickname already used"); @@ -68,7 +68,7 @@ namespace irc void Server::handleUser(unstd::SharedPtr client, const Message& msg) { - if(msg.getTokens().size() < 5) + if (msg.getTokens().size() < 5) { client->sendCode(ERR_NEEDMOREPARAMS, "Need more parameters"); logs::report(log_error, "USER, invalid command '%s'", msg.getRawMsg().c_str()); @@ -102,9 +102,9 @@ namespace irc void Server::handlePass(unstd::SharedPtr client, const Message& msg) { - if(client->isLogged()) + if (client->isLogged()) return; - if(msg.getTokens()[1] == _password) + if (msg.getTokens()[1] == _password) { client->login(); client->welcome(); @@ -119,7 +119,7 @@ namespace irc void Server::handleQuit(unstd::SharedPtr client, const Message& msg) { (void)msg; - for(channel_it it = _channels.begin(); it != _channels.end(); ++it) + for (channel_it it = _channels.begin(); it != _channels.end(); ++it) { it->removeClient(client); } @@ -129,37 +129,37 @@ namespace irc void Server::handlePart(unstd::SharedPtr client, const Message& msg) { - if(msg.getTokens().size() < 2 && msg.getTokens().size() > 3) + if (msg.getTokens().size() < 2 && msg.getTokens().size() > 3) { logs::report(log_error, "PART, invalid command '%s'", msg.getRawMsg().c_str()); return; } - if(msg.getTokens()[1][0] != '#' && msg.getTokens()[1][0] != '&') + if (msg.getTokens()[1][0] != '#' && msg.getTokens()[1][0] != '&') { logs::report(log_error, "PART, invalid channel name '%s'", msg.getTokens()[1].c_str()); return; } - if(!isChannelKnown(msg.getArgs()[0])) + if (!isChannelKnown(msg.getArgs()[0])) { client->sendCode(ERR_NOSUCHCHANNEL, msg.getArgs()[0] + " no such channel"); return; } Channel* channel = getChannelByName(msg.getArgs()[0]); - if(channel == NULL) + if (channel == NULL) logs::report(log_fatal_error, "(KICK), cannot get channel '%s' by name; panic !", channel->getName().c_str()); - if(!channel->removeClient(client)) + if (!channel->removeClient(client)) { client->sendCode(ERR_NOTONCHANNEL, "Not on channel"); return; } client->printUserHeader(); std::cout << "leaving channel, " << msg.getArgs()[0] << std::endl; - if(channel->getNumberOfClients() == 0) + if (channel->getNumberOfClients() == 0) { channel_it it; - for(it = _channels.begin(); it < _channels.end(); ++it) + for (it = _channels.begin(); it < _channels.end(); ++it) { - if(it->getName() == msg.getArgs()[0]) + if (it->getName() == msg.getArgs()[0]) break; } _channels.erase(it); @@ -169,51 +169,51 @@ namespace irc void Server::handleJoin(unstd::SharedPtr client, const Message& msg) { - if(msg.getArgs().empty()) + if (msg.getArgs().empty()) { client->sendCode(ERR_NEEDMOREPARAMS, "Need more params"); logs::report(log_error, "JOIN, invalid command '%s'", msg.getRawMsg().c_str()); return; } - if(msg.getTokens()[1][0] != '#' && msg.getTokens()[1][0] != '&') + if (msg.getTokens()[1][0] != '#' && msg.getTokens()[1][0] != '&') { logs::report(log_error, "JOIN, invalid channel name '%s'", msg.getTokens()[1].c_str()); return; } channel_it it; - for(it = _channels.begin(); it != _channels.end(); ++it) + for (it = _channels.begin(); it != _channels.end(); ++it) { - if(msg.getTokens()[1] == it->getName()) + if (msg.getTokens()[1] == it->getName()) break; } - if(it == _channels.end()) + if (it == _channels.end()) { _channels.push_back(Channel(msg.getTokens()[1])); _channels.back().addClient(client, true); logs::report(log_message, "channel '%s' has been created", msg.getTokens()[1].c_str()); return ; } - if((msg.getTokens().size() == 3 && msg.getTokens()[2] != it->getPassword()) || (msg.getTokens().size() == 2 && it->getPassword().size() > 0)) + if ((msg.getTokens().size() == 3 && msg.getTokens()[2] != it->getPassword()) || (msg.getTokens().size() == 2 && it->getPassword().size() > 0)) client->sendCode(ERR_BADCHANNELKEY, "Invalid password"); - else if(it->getChannelSize() != -1 && it->getChannelSize() >= static_cast(it->getNumberOfClients())) + else if (it->getChannelSize() != -1 && it->getChannelSize() >= static_cast(it->getNumberOfClients())) client->sendCode(ERR_CHANNELISFULL, "Channel is full"); - else if(it->isInviteOnly() && !client->hasBeenInvitedTo(it->getName())) + else if (it->isInviteOnly() && !client->hasBeenInvitedTo(it->getName())) client->sendCode(ERR_INVITEONLYCHAN, "channel is invite only and you have not been invited u looser"); - else if(it->getPassword().size() == 0) + else if (it->getPassword().size() == 0) it->addClient(client); - else if(msg.getTokens().size() == 3 && it->getPassword().size() > 0 && msg.getTokens()[2] == it->getPassword()) + else if (msg.getTokens().size() == 3 && it->getPassword().size() > 0 && msg.getTokens()[2] == it->getPassword()) it->addClient(client); } void Server::handlePrivMsg(unstd::SharedPtr client, const Message& msg) { - if(msg.getArgs().empty()) + if (msg.getArgs().empty()) { client->sendCode(ERR_NORECIPIENT, "No recipient given\n"); return; } - if(msg.getTokens().size() < 3) + if (msg.getTokens().size() < 3) { client->sendCode(ERR_NOTEXTTOSEND, "No text to send\n"); return; @@ -225,9 +225,9 @@ namespace irc if ((*itc)->getNickName() == msg.getTokens()[1] && (*itc)->getNickName() != client->getNickName()) { std::string complete_msg; - if(msg.getTokens().size() > 2) + if (msg.getTokens().size() > 2) { - for(std::vector::const_iterator tit = msg.getTokens().begin() + 2; tit < msg.getTokens().end(); ++tit) + for (std::vector::const_iterator tit = msg.getTokens().begin() + 2; tit < msg.getTokens().end(); ++tit) { complete_msg.append(*tit); complete_msg.append(" "); @@ -242,9 +242,9 @@ namespace irc } return; } - for(channel_it it = _channels.begin(); it != _channels.end(); ++it) + for (channel_it it = _channels.begin(); it != _channels.end(); ++it) { - if(msg.getTokens()[1] == it->getName()) + if (msg.getTokens()[1] == it->getName()) { if (!it->hasClient(client)) { @@ -252,9 +252,9 @@ namespace irc return ; } std::string complete_msg; - if(msg.getTokens().size() > 2) + if (msg.getTokens().size() > 2) { - for(std::vector::const_iterator tit = msg.getTokens().begin() + 2; tit < msg.getTokens().end(); ++tit) + for (std::vector::const_iterator tit = msg.getTokens().begin() + 2; tit < msg.getTokens().end(); ++tit) { complete_msg.append(*tit); complete_msg.append(" "); @@ -269,7 +269,7 @@ namespace irc void Server::handleNotice(unstd::SharedPtr client, const Message& msg) { - if(msg.getArgs().empty()) + if (msg.getArgs().empty()) { logs::report(log_error, "NOTICE, invalid command '%s'", msg.getRawMsg().c_str()); return; @@ -281,9 +281,9 @@ namespace irc if ((*itc)->getNickName() == msg.getTokens()[1] && (*itc)->getNickName() != client->getNickName()) { std::string complete_msg; - if(msg.getTokens().size() > 2) + if (msg.getTokens().size() > 2) { - for(std::vector::const_iterator tit = msg.getTokens().begin() + 2; tit < msg.getTokens().end(); ++tit) + for (std::vector::const_iterator tit = msg.getTokens().begin() + 2; tit < msg.getTokens().end(); ++tit) { complete_msg.append(*tit); complete_msg.append(" "); @@ -296,14 +296,14 @@ namespace irc } return ; } - for(channel_it it = _channels.begin(); it != _channels.end(); ++it) + for (channel_it it = _channels.begin(); it != _channels.end(); ++it) { - if(msg.getTokens()[1] == it->getName()) + if (msg.getTokens()[1] == it->getName()) { std::string complete_msg; - if(msg.getTokens().size() > 2) + if (msg.getTokens().size() > 2) { - for(std::vector::const_iterator tit = msg.getTokens().begin() + 2; tit < msg.getTokens().end(); ++tit) + for (std::vector::const_iterator tit = msg.getTokens().begin() + 2; tit < msg.getTokens().end(); ++tit) { complete_msg.append(*tit); complete_msg.append(" "); @@ -318,44 +318,44 @@ namespace irc void Server::handleInvite(unstd::SharedPtr client, const Message& msg) { - if(msg.getArgs().empty() || msg.getArgs().size() != 2) + if (msg.getArgs().empty() || msg.getArgs().size() != 2) { logs::report(log_error, "INVITE, invalid command '%s'", msg.getRawMsg().c_str()); return; } - if(!isUserKnown(msg.getArgs()[0])) + if (!isUserKnown(msg.getArgs()[0])) { client->sendCode(ERR_NOSUCHNICK, const_cast(msg.getArgs()[0]) + " no such nick"); return; } - if(!isChannelKnown(msg.getArgs()[1])) + if (!isChannelKnown(msg.getArgs()[1])) { client->sendCode(ERR_NOSUCHCHANNEL, const_cast(msg.getArgs()[1]) + " no such channel"); return; } Channel* channel_target = getChannelByName(msg.getArgs()[1]); - if(channel_target == NULL) + if (channel_target == NULL) logs::report(log_fatal_error, "(INVITE), cannot get channel '%s' by name; panic !", msg.getArgs()[1].c_str()); unstd::SharedPtr client_target = getClientByName(msg.getArgs()[0]); - if(client_target.get() == NULL) + if (client_target.get() == NULL) logs::report(log_fatal_error, "(INVITE), cannot get client '%s' by name; panic !", msg.getArgs()[0].c_str()); - if(!channel_target->hasClient(client)) + if (!channel_target->hasClient(client)) { logs::report(log_fatal_error, "(INVITE), cannot get channel '%s' by name; panic !", msg.getArgs()[1].c_str()); return; } - if(channel_target->hasClient(client_target->getNickName())) + if (channel_target->hasClient(client_target->getNickName())) { client->sendCode(ERR_USERONCHANNEL, msg.getArgs()[0] + ' ' + msg.getArgs()[1], "is already on channel"); return; } - if(channel_target->isInviteOnly() && !channel_target->isOp(client)) + if (channel_target->isInviteOnly() && !channel_target->isOp(client)) { client->sendCode(ERR_CHANOPRIVSNEEDED, msg.getArgs()[1], "you're not channel operator"); return; @@ -368,7 +368,7 @@ namespace irc void Server::handleKick(unstd::SharedPtr client, const Message& msg) { - if(msg.getArgs().empty()) + if (msg.getArgs().empty()) { logs::report(log_error, "KICK, invalid command '%s'", msg.getRawMsg().c_str()); return; @@ -378,33 +378,33 @@ namespace irc std::vector channels = unstd::split(msg.getArgs()[0], ','); std::vector users = unstd::split(msg.getArgs()[1], ','); - if(users.size() != channels.size()) + if (users.size() != channels.size()) { client->sendCode(ERR_NEEDMOREPARAMS, "KICK : Not enough parameters"); return; } - for(name_it user = users.begin(), channel = channels.begin(); user < users.end(); ++user, ++channel) + for (name_it user = users.begin(), channel = channels.begin(); user < users.end(); ++user, ++channel) { - if(!isUserKnown(*user)) + if (!isUserKnown(*user)) { client->sendCode(ERR_NOSUCHNICK, const_cast(*user) + " no such nick"); continue; } - if(!isChannelKnown(*channel)) + if (!isChannelKnown(*channel)) { client->sendCode(ERR_NOSUCHCHANNEL, const_cast(*channel) + " no such channel"); continue; } Channel* channel_target = getChannelByName(*channel); - if(channel_target == NULL) + if (channel_target == NULL) logs::report(log_fatal_error, "(KICK), cannot get channel '%s' by name; panic !", channel->c_str()); unstd::SharedPtr client_target = getClientByName(*user); - if(client_target.get() == NULL) + if (client_target.get() == NULL) logs::report(log_fatal_error, "(KICK), cannot get client '%s' by name; panic !", user->c_str()); - if(!channel_target->kick(client, client_target, msg.getReason())) + if (!channel_target->kick(client, client_target, msg.getReason())) { logs::report(log_error, "could not kick %s because why not", user->c_str()); continue; @@ -430,34 +430,34 @@ namespace irc irc::Channel *chan; logs::report(log_message, "tokensize ok : %d", msg.getTokens().size()); - if(msg.getTokens().size() != 2) + if (msg.getTokens().size() != 2) return; - if((chan = getChannelByName(msg.getTokens()[1])) == NULL) + if ((chan = getChannelByName(msg.getTokens()[1])) == NULL) client->sendCode(ERR_NOSUCHCHANNEL, "No such channel"); chan->sendWho(client); } void Server::handleTopic(unstd::SharedPtr client, const Message& msg) { - if(msg.getArgs().empty()) + if (msg.getArgs().empty()) { logs::report(log_error, "TOPIC, invalid command '%s'", msg.getRawMsg().c_str()); return; } - if(!isChannelKnown(msg.getArgs()[0])) + if (!isChannelKnown(msg.getArgs()[0])) { client->sendCode(ERR_NOSUCHCHANNEL, msg.getArgs()[0] + " no such channel"); return; } Channel* channel = getChannelByName(msg.getArgs()[0]); - if(channel == NULL) + if (channel == NULL) logs::report(log_fatal_error, "(TOPIC), cannot get channel '%s' by name; panic !", channel->getName().c_str()); - if(!channel->hasClient(client)) + if (!channel->hasClient(client)) { client->sendCode(ERR_NOTONCHANNEL, msg.getArgs()[0] + " you're not on that channel"); return; } - if(!msg.getReason().empty()) + if (!msg.getReason().empty()) { channel->setTopic(client, msg.getReason()); client->printUserHeader(); @@ -469,13 +469,13 @@ namespace irc void Server::handlePing(unstd::SharedPtr client, const Message& msg) { - if(msg.getTokens().size() == 1) + if (msg.getTokens().size() == 1) { logs::report(log_error, "PING, invalid command '%s'", msg.getRawMsg().c_str()); return; } std::string out = "PONG"; - for(std::vector::const_iterator it = msg.getTokens().begin() + 1; it < msg.getTokens().end(); ++it) + for (std::vector::const_iterator it = msg.getTokens().begin() + 1; it < msg.getTokens().end(); ++it) out += ' ' + *it; out += "\r\n"; client->sendPlainText(out); @@ -486,12 +486,12 @@ namespace irc void Server::handleMode(unstd::SharedPtr client, const Message& msg) { irc::Channel *chan; - if(msg.getTokens().size() < 2) + if (msg.getTokens().size() < 2) return ; - if(msg.getTokens().size() == 2 && (msg.getTokens()[1][0] == '#' || msg.getTokens()[1][0] == '&')) + if (msg.getTokens().size() == 2 && (msg.getTokens()[1][0] == '#' || msg.getTokens()[1][0] == '&')) { chan = getChannelByName(msg.getTokens()[1]); - if(chan == NULL) + if (chan == NULL) client->sendCode(ERR_NOSUCHCHANNEL, "No such channel"); else chan->showModes(client); @@ -499,17 +499,17 @@ namespace irc } logs::report(log_message, "Mode parsing ok"); chan = getChannelByName(msg.getTokens()[1]); - if(chan == NULL) + if (chan == NULL) { client->sendCode(ERR_NOSUCHCHANNEL, "No such channel"); return ; } - if(!chan->isOp(client)) + if (!chan->isOp(client)) { client->sendCodeInChannel(ERR_CHANOPRIVSNEEDED, *chan, "You need operator privileges to execute this command"); return ; } - if(msg.getTokens()[2][0] != '-' && msg.getTokens()[2][0] != '+') + if (msg.getTokens()[2][0] != '-' && msg.getTokens()[2][0] != '+') return ; chan->changeMode(client, msg); }