From e58d03ff3465f1d94e46077771242a62e12d7c72 Mon Sep 17 00:00:00 2001 From: kinou-p Date: Sun, 12 Feb 2023 22:16:04 +0100 Subject: [PATCH] add contain_any and add must be registered for join --- Makefile | 3 ++- includes/ft_irc.hpp | 48 +++++++++++++++++++--------------- srcs/client_request.cpp | 4 +-- srcs/commands/channel/join.cpp | 14 +++++++++- srcs/delete_user.cpp | 38 +++++++++++++++++++++++++++ srcs/new_connection.cpp | 12 ++++----- srcs/utils.cpp | 36 ++++++++----------------- 7 files changed, 99 insertions(+), 56 deletions(-) create mode 100644 srcs/delete_user.cpp diff --git a/Makefile b/Makefile index 977e93a..2740ed2 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/12/01 17:27:29 by apommier #+# #+# # -# Updated: 2023/02/12 15:44:05 by apommier ### ########.fr # +# Updated: 2023/02/12 20:53:25 by apommier ### ########.fr # # # # **************************************************************************** # @@ -18,6 +18,7 @@ SRCS := main.cpp\ client_request.cpp\ new_connection.cpp\ server_loop.cpp\ + delete_user.cpp\ \ commands/cmd_utils.cpp\ commands/parse_commands.cpp\ diff --git a/includes/ft_irc.hpp b/includes/ft_irc.hpp index 112eff2..138b1da 100644 --- a/includes/ft_irc.hpp +++ b/includes/ft_irc.hpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/01 17:27:37 by apommier #+# #+# */ -/* Updated: 2023/02/12 17:31:11 by apommier ### ########.fr */ +/* Updated: 2023/02/12 21:10:18 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -106,6 +106,7 @@ struct clientData //each client have one struct channelData //each chan have one { std::string name; + std::string topic; std::vector userList; std::vector banList; @@ -126,7 +127,7 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY int serverFd; std::vector userList; - accessList channelList; + accessList channelList; accessList userData; int alive; @@ -140,64 +141,69 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY +/* ************************************************************************** */ +/* *******************************DEL USER*********************************** */ +/* ************************************************************************** */ + +void del_user_in_chan(clientData *user, channelData *chan); +void delete_user(fdList &allFds, int userNbr); /* ************************************************************************** */ /* *********************************UTILS************************************ */ /* ************************************************************************** */ -void ft_putstr_fd(int fd, std::string str); -void cmd_error(fdList &allFds, int userNbr, std::string error); -void ft_error(std::string str); -void close_fd(int fd); -void del_user_in_chan(clientData *user, channelData *chan); -void delete_user(fdList &allFds, int userNbr); +void ft_putstr_fd(int fd, std::string str); +void cmd_error(fdList &allFds, int userNbr, std::string error); +void ft_error(std::string str); +void close_fd(int fd); +int contain_any(std::string str, std::string toFind); /* ************************************************************************** */ /* *******************************AUTH UTILS********************************* */ /* ************************************************************************** */ -void print_registered_msg(fdList &allFds, int userNbr); +void print_registered_msg(fdList &allFds, int userNbr); /* ************************************************************************** */ /* *******************************CMD UTILS********************************** */ /* ************************************************************************** */ -void split(std::string const &str, const char delim, std::vector &out); -void split_but_keep(std::string const &str, const char delim, std::vector &out); //same as split but keep one delimeter +void split(std::string const &str, const char delim, std::vector &out); +void split_but_keep(std::string const &str, const char delim, std::vector &out); //same as split but keep one delimeter /* ************************************************************************** */ /* *******************************CHAN UTILS********************************* */ /* ************************************************************************** */ -int find_channel(fdList &allFds, std::string chanName); -int find_user(fdList &allFds, std::string userName); -void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr); //in privmsg.cpp +int find_channel(fdList &allFds, std::string chanName); +int find_user(fdList &allFds, std::string userName); +void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr); //in privmsg.cpp /* ************************************************************************** */ /* ******************************START SERVER******************************** */ /* ************************************************************************** */ -void initialize(char **av); //start_server.cpp -void start_loop(fdList &allFds); //server_loop.cpp +void initialize(char **av); //start_server.cpp +void start_loop(fdList &allFds); //server_loop.cpp /* ************************************************************************** */ /* *****************************EPOLL UTILITY******************************** */ /* ************************************************************************** */ -void epoll_add(int epollFd, int fd); -int epoll_start(); //2nd +void epoll_add(int epollFd, int fd); +int epoll_start(); //2nd /* ************************************************************************** */ /* *************************CONNECTION AND REQUEST*************************** */ /* ************************************************************************** */ -void new_connection(fdList &allFds); -bool clientRequest(fdList &allFds, int userNbr); +void new_connection(fdList &allFds); +bool clientRequest(fdList &allFds, int userNbr); /* ************************************************************************** */ /* ***************************COMMANDS PARSING******************************* */ /* ************************************************************************** */ -void parse_commands(std::string buffer, fdList &allFds, int userNbr); +void parse_commands(std::string buffer, fdList &allFds, int userNbr); diff --git a/srcs/client_request.cpp b/srcs/client_request.cpp index 4f2f9f2..d0dc866 100644 --- a/srcs/client_request.cpp +++ b/srcs/client_request.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/09 22:34:36 by apommier #+# #+# */ -/* Updated: 2023/02/11 23:53:10 by apommier ### ########.fr */ +/* Updated: 2023/02/12 21:40:10 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -41,7 +41,7 @@ bool clientRequest(fdList &allFds, int userNbr)//, // std::cout << "buffer empty\n"; return (1); } - //std::cout << "BUFFER: ---" << buf << "---" << std::endl; + std::cout << "BUFFER: ---" << buf << "---" << std::endl; //split with \n and while (tab de split) -> parsing diff --git a/srcs/commands/channel/join.cpp b/srcs/commands/channel/join.cpp index a5c10d2..97b12d6 100644 --- a/srcs/commands/channel/join.cpp +++ b/srcs/commands/channel/join.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/09 15:40:33 by apommier #+# #+# */ -/* Updated: 2023/02/12 17:33:31 by apommier ### ########.fr */ +/* Updated: 2023/02/12 22:03:21 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -76,6 +76,12 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr) std::cout << "==========join start========\n"; std::cout << "userNbr= " << userNbr << std::endl; + if (!allFds.userData[userNbr].registered) + { + /*change error*/ + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not regestered\n"); //ERR_NEEDMOREPARAMS + return ; + } split(buffer, ' ', splitBuff); if (splitBuff.size() < 2) { @@ -83,6 +89,12 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr) cmd_error(allFds, allFds.userData[userNbr].fd, "461 * JOIN :Not enough parameters\n"); //ERR_NEEDMOREPARAMS return ; } + //if (splitBuff[1].find(' ') != std::string::npos || splitBuff[1].find(7) != std::string::npos) + if (splitBuff[1][0] != '#' && splitBuff[1][0] != '&') + { + //leave_all(allFds, userNbr); + return ; + } if (splitBuff[1] == "0") { leave_all(allFds, userNbr); diff --git a/srcs/delete_user.cpp b/srcs/delete_user.cpp new file mode 100644 index 0000000..3ca330b --- /dev/null +++ b/srcs/delete_user.cpp @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* delete_user.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/02/12 20:38:50 by apommier #+# #+# */ +/* Updated: 2023/02/12 20:39:10 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/ft_irc.hpp" + +void del_user_in_chan(clientData *user, channelData *chan) +{ + size_t i; + for (i = 0; user != chan->userList[i]; i++) + ; + chan->userList.erase(chan->userList.begin() + i); +} + +void delete_user(fdList &allFds, int userNbr) +{ + std::cout << "Delete user nbr " << userNbr << std::endl; + + for (size_t i = 0; i < allFds.userData[userNbr].joinedChan.size(); i++)//all joined chan + { + del_user_in_chan(&allFds.userData[userNbr], allFds.userData[userNbr].joinedChan[i]); + //allFds.userData[userNbr].joinedChan[i].erase(find_user_in_chan(allFds.userData[userNbr].joinedChan[i])/*find user in chan*/) + } + close(allFds.userData[userNbr].fd); + + allFds.userData.erase(allFds.userData.begin() + userNbr); + allFds.userList.erase(allFds.userList.begin() + userNbr); + + allFds.nbrUser--; +} \ No newline at end of file diff --git a/srcs/new_connection.cpp b/srcs/new_connection.cpp index f7dd998..86f03e0 100644 --- a/srcs/new_connection.cpp +++ b/srcs/new_connection.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/09 22:26:27 by apommier #+# #+# */ -/* Updated: 2023/02/12 14:17:36 by apommier ### ########.fr */ +/* Updated: 2023/02/12 21:42:07 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,11 +22,11 @@ void new_connection(fdList &allFds) //std::cout << "in new adress " << &allFds << std::endl; //std::cout << "new connection !" << std::endl; - if (MAX_EVENTS == allFds.nbrUser) - { - std::cout << "new connection refused, already full" << std::endl; - return ; - } + // if (MAX_EVENTS == allFds.nbrUser) + // { + // std::cout << "new connection refused, already full" << std::endl; + // return ; + // } //int newUserFd; //allFds.userList.push_back(newUserFd); diff --git a/srcs/utils.cpp b/srcs/utils.cpp index 1a71d8e..5fcd499 100644 --- a/srcs/utils.cpp +++ b/srcs/utils.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 21:46:41 by apommier #+# #+# */ -/* Updated: 2023/02/12 14:31:10 by apommier ### ########.fr */ +/* Updated: 2023/02/12 20:52:45 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -42,32 +42,18 @@ void cmd_error(fdList &allFds, int fd, std::string error) write(fd, error.c_str(), error.size()); } +int contain_any(std::string str, std::string toFind) +{ + for (int i = 0; toFind[i] != -1; i++) + { + if (str.find(toFind[i]) != std::string::npos) + return (1); + } + return (0); +} + // void find_user_in_chan(fdList &allFds, channelData *chan) // { // } -void del_user_in_chan(clientData *user, channelData *chan) -{ - size_t i; - for (i = 0; user != chan->userList[i]; i++) - ; - chan->userList.erase(chan->userList.begin() + i); -} - -void delete_user(fdList &allFds, int userNbr) -{ - std::cout << "Delete user nbr " << userNbr << std::endl; - - for (size_t i = 0; i < allFds.userData[userNbr].joinedChan.size(); i++)//all joined chan - { - del_user_in_chan(&allFds.userData[userNbr], allFds.userData[userNbr].joinedChan[i]); - //allFds.userData[userNbr].joinedChan[i].erase(find_user_in_chan(allFds.userData[userNbr].joinedChan[i])/*find user in chan*/) - } - close(allFds.userData[userNbr].fd); - - allFds.userData.erase(allFds.userData.begin() + userNbr); - allFds.userList.erase(allFds.userList.begin() + userNbr); - - allFds.nbrUser--; -} \ No newline at end of file