kaou kakou dans l'o

This commit is contained in:
2024-01-30 21:34:29 +01:00
parent 9663cf6398
commit 1801c6b7f5
4 changed files with 21 additions and 41 deletions

View File

@@ -6,7 +6,7 @@
/* By: vvaas <vvaas@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: vvaas <vvaas@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/21 10:33:17 by maldavid #+# #+# */ /* Created: 2024/01/21 10:33:17 by maldavid #+# #+# */
/* Updated: 2024/01/30 17:06:21 by vvaas ### ########.fr */ /* Updated: 2024/01/30 21:12:10 by vvaas ### ########.fr */
/* */ /* */
/******************************************************************************/ /******************************************************************************/
@@ -41,7 +41,7 @@ namespace irc
inline void login() { _logged = true; } inline void login() { _logged = true; }
inline void register_user() { _registered = true; } inline void register_user() { _registered = true; }
inline void welcome() { if (!isLogged() || isWelcomed() || _nickname.empty()) return ; _welcomed = true; sendCode(RPL_WELCOME, "Welcome to yipirc :), " + _nickname); } inline void welcome() { if (!isLogged() || !isRegistered() || isWelcomed() || _nickname.empty()) return ; _welcomed = true; sendCode(RPL_WELCOME, "Welcome to yipirc :), " + _nickname); }
inline void requireDisconnect() { _disconnect_required = true; } inline void requireDisconnect() { _disconnect_required = true; }
inline bool isLogged() const { return _logged; } inline bool isLogged() const { return _logged; }

View File

@@ -6,7 +6,7 @@
/* By: vvaas <vvaas@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: vvaas <vvaas@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/21 10:36:21 by maldavid #+# #+# */ /* Created: 2024/01/21 10:36:21 by maldavid #+# #+# */
/* Updated: 2024/01/30 21:06:03 by maldavid ### ########.fr */ /* Updated: 2024/01/30 21:26:58 by vvaas ### ########.fr */
/* */ /* */
/******************************************************************************/ /******************************************************************************/
@@ -41,7 +41,6 @@ namespace irc
void Channel::modOperator(unstd::SharedPtr<class Client> client, const std::string& clientname, bool mode) void Channel::modOperator(unstd::SharedPtr<class Client> client, const std::string& clientname, bool mode)
{ {
client_it it; client_it it;
logs::report(log_message, "mode operator, mode = %d", mode);
if(mode) if(mode)
{ {
for(it = _clients.begin(); it != _clients.end(); ++it) for(it = _clients.begin(); it != _clients.end(); ++it)
@@ -59,10 +58,8 @@ namespace irc
for(it = _operators.begin(); it != _operators.end(); ++it) for(it = _operators.begin(); it != _operators.end(); ++it)
{ {
logs::report(log_message, "nickname %s, clientname : %s", const_cast<unstd::SharedPtr<irc::Client>&>(*it)->getNickName().c_str(), clientname.c_str());
if(const_cast<unstd::SharedPtr<irc::Client>&>(*it)->getNickName() == clientname) if(const_cast<unstd::SharedPtr<irc::Client>&>(*it)->getNickName() == clientname)
{ {
logs::report(log_message, "found %s to erase", const_cast<unstd::SharedPtr<irc::Client>&>(*it)->getNickName().c_str());
_operators.erase(it); _operators.erase(it);
break; break;
} }
@@ -99,7 +96,6 @@ namespace irc
clientlist += '@'; clientlist += '@';
clientlist += const_cast<unstd::SharedPtr<irc::Client>&>(*it)->getNickName() + ' '; clientlist += const_cast<unstd::SharedPtr<irc::Client>&>(*it)->getNickName() + ' ';
} }
logs::report(log_message, "%s", clientlist.c_str());
client->sendModular("%s\r\n", clientlist.c_str()); client->sendModular("%s\r\n", clientlist.c_str());
clientlist = ":yipirc " RPL_NAMREPLY " " + client->getNickName() + " @ " + getName() + " :"; clientlist = ":yipirc " RPL_NAMREPLY " " + client->getNickName() + " @ " + getName() + " :";
client->sendModular(":yipirc %s %s %s : End of names list\r\n", RPL_ENDOFNAMES, client->getNickName().c_str(), getName().c_str()); client->sendModular(":yipirc %s %s %s : End of names list\r\n", RPL_ENDOFNAMES, client->getNickName().c_str(), getName().c_str());
@@ -154,7 +150,6 @@ namespace irc
void Channel::changeMode(unstd::SharedPtr<class Client> client, const Message& msg) void Channel::changeMode(unstd::SharedPtr<class Client> client, const Message& msg)
{ {
bool modevalue = (msg.getTokens()[2][0] != '-'); bool modevalue = (msg.getTokens()[2][0] != '-');
logs::report(log_message, "tokensize : %d, mode : %c, modevalue %d", msg.getTokens().size(), msg.getTokens()[2][1], modevalue);
switch(msg.getTokens()[2][1]) switch(msg.getTokens()[2][1])
{ {
case 'i': _invite_only = modevalue; break; case 'i': _invite_only = modevalue; break;
@@ -204,7 +199,6 @@ namespace irc
default : client->sendCode(":yipirc " ERR_UNKNOWNMODE " @", getName().c_str(), "Unknown mode"); return; default : client->sendCode(":yipirc " ERR_UNKNOWNMODE " @", getName().c_str(), "Unknown mode"); return;
} }
logs::report(log_message, "%s MODES : i:%d t:%d k:%s l:%d", getName().c_str(), _invite_only, _topic_op_restrict, _password.c_str(), _channel_size);
showModesModify(client, msg); showModesModify(client, msg);
} }

View File

@@ -6,7 +6,7 @@
/* By: vvaas <vvaas@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: vvaas <vvaas@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/21 09:31:17 by maldavid #+# #+# */ /* Created: 2024/01/21 09:31:17 by maldavid #+# #+# */
/* Updated: 2024/01/30 21:06:26 by maldavid ### ########.fr */ /* Updated: 2024/01/30 21:22:56 by vvaas ### ########.fr */
/* */ /* */
/******************************************************************************/ /******************************************************************************/
@@ -92,7 +92,7 @@ namespace irc
close((*it)->getFD()); close((*it)->getFD());
for(channel_it cit = _channels.begin(); cit != _channels.end();) for(channel_it cit = _channels.begin(); cit != _channels.end();)
{ {
cit->removeClient(*it, ""); cit->removeClient(*it, "", true);
if(cit->getNumberOfClients() == 0) if(cit->getNumberOfClients() == 0)
{ {
logs::report(log_message, "channel '%s' has been destroyed", cit->getName().c_str()); logs::report(log_message, "channel '%s' has been destroyed", cit->getName().c_str());

View File

@@ -6,7 +6,7 @@
/* By: vvaas <vvaas@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: vvaas <vvaas@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/22 17:31:06 by maldavid #+# #+# */ /* Created: 2024/01/22 17:31:06 by maldavid #+# #+# */
/* Updated: 2024/01/30 21:05:17 by maldavid ### ########.fr */ /* Updated: 2024/01/30 21:33:51 by vvaas ### ########.fr */
/* */ /* */
/******************************************************************************/ /******************************************************************************/
@@ -41,11 +41,8 @@ namespace irc
client->sendCode(ERR_NONICKNAMEGIVEN, "No nickname given"); client->sendCode(ERR_NONICKNAMEGIVEN, "No nickname given");
return; return;
} }
if(msg.getTokens().size() != 2 && msg.getTokens().size() != 3) if(msg.getTokens().size() >= 3)
{ return ;
logs::report(log_error, "NICK, invalid command '%s'", msg.getRawMsg().c_str());
return;
}
const std::string& nickname = msg.getTokens()[1]; 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)
{ {
@@ -73,7 +70,6 @@ namespace irc
if(msg.getTokens().size() < 5) if(msg.getTokens().size() < 5)
{ {
client->sendCode(ERR_NEEDMOREPARAMS, "Need more parameters"); client->sendCode(ERR_NEEDMOREPARAMS, "Need more parameters");
logs::report(log_error, "USER, invalid command '%s'", msg.getRawMsg().c_str());
return; return;
} }
if(client->isRegistered()) if(client->isRegistered())
@@ -99,6 +95,8 @@ namespace irc
realname.erase(realname.end() - 1); realname.erase(realname.end() - 1);
client->setNewRealName(realname); client->setNewRealName(realname);
std::cout << "new realname, " << client->getRealName() << std::endl; std::cout << "new realname, " << client->getRealName() << std::endl;
client->register_user();
client->welcome();
} }
void Server::handlePass(unstd::SharedPtr<class Client> client, const Message& msg) void Server::handlePass(unstd::SharedPtr<class Client> client, const Message& msg)
@@ -129,14 +127,11 @@ namespace irc
{ {
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()); client->sendCode(ERR_NEEDMOREPARAMS, "Parameters amount invalid");
return; 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; return;
}
if(!isChannelKnown(msg.getArgs()[0])) if(!isChannelKnown(msg.getArgs()[0]))
{ {
client->sendCode(ERR_NOSUCHCHANNEL, msg.getArgs()[0] + " no such channel"); client->sendCode(ERR_NOSUCHCHANNEL, msg.getArgs()[0] + " no such channel");
@@ -170,14 +165,10 @@ namespace irc
if(msg.getArgs().empty()) if(msg.getArgs().empty())
{ {
client->sendCode(ERR_NEEDMOREPARAMS, "Need more params"); client->sendCode(ERR_NEEDMOREPARAMS, "Need more params");
logs::report(log_error, "JOIN, invalid command '%s'", msg.getRawMsg().c_str());
return; 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; return;
}
channel_it it; channel_it it;
for(it = _channels.begin(); it != _channels.end(); ++it) for(it = _channels.begin(); it != _channels.end(); ++it)
@@ -208,14 +199,19 @@ namespace irc
{ {
if(msg.getArgs().empty()) if(msg.getArgs().empty())
{ {
client->sendCode(ERR_NORECIPIENT, "No recipient given\n"); client->sendCode(ERR_NORECIPIENT, "No recipient given");
return; return;
} }
if(msg.getTokens().size() < 3) if(msg.getTokens().size() < 3)
{ {
client->sendCode(ERR_NOTEXTTOSEND, "No text to send\n"); client->sendCode(ERR_NOTEXTTOSEND, "No text to send");
return; return;
} }
if(msg.getReason().empty())
{
client->sendCode(ERR_NOTEXTTOSEND, "No text to send");
return ;
}
if(msg.getTokens()[1][0] != '&' && msg.getTokens()[1][0] != '#') if(msg.getTokens()[1][0] != '&' && msg.getTokens()[1][0] != '#')
{ {
for(client_it itc = _client.begin(); itc != _client.end(); ++itc) for(client_it itc = _client.begin(); itc != _client.end(); ++itc)
@@ -268,10 +264,7 @@ namespace irc
void Server::handleNotice(unstd::SharedPtr<class Client> client, const Message& msg) void Server::handleNotice(unstd::SharedPtr<class Client> 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; return;
}
if(msg.getTokens()[1][0] != '&' && msg.getTokens()[1][0] != '#') if(msg.getTokens()[1][0] != '&' && msg.getTokens()[1][0] != '#')
{ {
for(client_it itc = _client.begin(); itc != _client.end(); ++itc) for(client_it itc = _client.begin(); itc != _client.end(); ++itc)
@@ -318,7 +311,7 @@ namespace irc
{ {
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()); client->sendCode(ERR_NEEDMOREPARAMS, "Invalid parameters");
return; return;
} }
@@ -368,7 +361,7 @@ namespace irc
{ {
if(msg.getArgs().empty()) if(msg.getArgs().empty())
{ {
logs::report(log_error, "KICK, invalid command '%s'", msg.getRawMsg().c_str()); client->sendCode(ERR_NONICKNAMEGIVEN, "No nickname given");
return; return;
} }
@@ -403,10 +396,7 @@ namespace irc
logs::report(log_fatal_error, "(KICK), cannot get client '%s' by name; panic !", user->c_str()); 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; continue;
}
client->printUserHeader(); client->printUserHeader();
std::cout << "kicked " << *user << " from " << *channel << std::endl; std::cout << "kicked " << *user << " from " << *channel << std::endl;
if(channel_target->getNumberOfClients() == 0) if(channel_target->getNumberOfClients() == 0)
@@ -427,7 +417,6 @@ namespace irc
{ {
irc::Channel *chan; irc::Channel *chan;
logs::report(log_message, "tokensize ok : %d", msg.getTokens().size());
if(msg.getTokens().size() != 2) if(msg.getTokens().size() != 2)
return; return;
if((chan = getChannelByName(msg.getTokens()[1])) == NULL) if((chan = getChannelByName(msg.getTokens()[1])) == NULL)
@@ -439,7 +428,7 @@ namespace irc
{ {
if(msg.getArgs().empty()) if(msg.getArgs().empty())
{ {
logs::report(log_error, "TOPIC, invalid command '%s'", msg.getRawMsg().c_str()); client->sendCode(ERR_NEEDMOREPARAMS, "Need more parameters");
return; return;
} }
if(!isChannelKnown(msg.getArgs()[0])) if(!isChannelKnown(msg.getArgs()[0]))
@@ -468,10 +457,7 @@ namespace irc
void Server::handlePing(unstd::SharedPtr<class Client> client, const Message& msg) void Server::handlePing(unstd::SharedPtr<class Client> 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; return;
}
std::string out = "PONG"; std::string out = "PONG";
for(std::vector<std::string>::const_iterator it = msg.getTokens().begin() + 1; it < msg.getTokens().end(); ++it) for(std::vector<std::string>::const_iterator it = msg.getTokens().begin() + 1; it < msg.getTokens().end(); ++it)
out += ' ' + *it; out += ' ' + *it;