diff --git a/srcs/client.cpp b/srcs/client.cpp index 88164e4..649937a 100644 --- a/srcs/client.cpp +++ b/srcs/client.cpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/21 10:35:52 by maldavid #+# #+# */ -/* Updated: 2024/01/29 21:18:33 by vvaas ### ########.fr */ +/* Updated: 2024/01/29 23:10:37 by vvaas ### ########.fr */ /* */ /******************************************************************************/ @@ -119,11 +119,22 @@ namespace irc std::string Client::getNextMsg() { std::size_t finder = _msg_in_flight.find("\r\n"); - if(finder == std::string::npos) - logs::report(log_fatal_error, "client %d [getNextMsg()] : cannot get any other message, panic !", _id); - std::string msg = _msg_in_flight.substr(0, finder); - _msg_in_flight = _msg_in_flight.substr(finder + 2); - return msg; + if(finder != std::string::npos) + { + std::string msg = _msg_in_flight.substr(0, finder); + _msg_in_flight = _msg_in_flight.substr(finder + 2); + return msg; + } + finder = _msg_in_flight.find("\n"); + if(finder != std::string::npos) + { + std::string msg = _msg_in_flight.substr(0, finder); + _msg_in_flight = _msg_in_flight.substr(finder + 1); + return msg; + } + logs::report(log_warning, "Incomplete data type"); + _msg_in_flight.clear(); + return (std::string()); } Client::~Client() {} diff --git a/srcs/server.cpp b/srcs/server.cpp index 5418493..35a6c20 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/29 22:10:26 by vvaas ### ########.fr */ +/* Updated: 2024/01/29 23:09:30 by vvaas ### ########.fr */ /* */ /******************************************************************************/ @@ -67,13 +67,12 @@ namespace irc void Server::handleInput() { char buffer[INPUT_SIZE] = { 0 }; - + ssize_t recv_size; for(std::vector >::iterator it = _client.begin(); it != _client.end(); ++it) { if(!FD_ISSET((*it)->getFD(), &_fd_set)) continue; - - while(recv((*it)->getFD(), buffer, INPUT_SIZE, 0) > 0) // read() but for socket fd + while((recv_size = recv((*it)->getFD(), buffer, INPUT_SIZE, 0)) > 0) // read() but for socket fd { (*it)->newMsgInFlight(buffer); #ifdef DEBUG @@ -82,8 +81,7 @@ namespace irc while(handleMessage(*it)); std::memset(buffer, 0, sizeof(buffer)); // clear the buffer to avoid trash remaining } - - if(recv((*it)->getFD(), buffer, INPUT_SIZE, 0) == 0 || (*it)->disconnectRequired()) // recv return 0 if an user disconnect + if(recv_size == 0 || (*it)->disconnectRequired()) // recv return 0 if an user disconnect { logs::report(log_message, "User %d disconnected", (*it)->getID()); close((*it)->getFD()); diff --git a/srcs/server_functions.cpp b/srcs/server_functions.cpp index 2352a9b..5ac748e 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/29 21:32:24 by vvaas ### ########.fr */ +/* Updated: 2024/01/29 23:16:50 by vvaas ### ########.fr */ /* */ /******************************************************************************/ @@ -221,6 +221,11 @@ namespace irc { if(msg.getTokens()[1] == it->getName()) { + if (!it->hasClient(client)) + { + client->sendCode(ERR_CANNOTSENDTOCHAN, "You are not in the channel"); + return ; + } std::string complete_msg; if(msg.getTokens().size() > 2) {