diff --git a/Makefile b/Makefile index 2740ed2..5e1611f 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/12/01 17:27:29 by apommier #+# #+# # -# Updated: 2023/02/12 20:53:25 by apommier ### ########.fr # +# Updated: 2023/02/13 00:20:18 by apommier ### ########.fr # # # # **************************************************************************** # @@ -27,6 +27,7 @@ SRCS := main.cpp\ commands/auth/pass.cpp\ commands/auth/user.cpp\ commands/auth/auth_utils.cpp\ + commands/auth/connect_client.cpp\ \ commands/channel/channel_utils.cpp\ commands/channel/join.cpp\ @@ -34,6 +35,7 @@ SRCS := main.cpp\ \ commands/other/quit.cpp\ commands/other/squit.cpp\ + commands/other/ping_pong.cpp\ \ commands/channel_op/invite.cpp\ commands/channel_op/kick.cpp\ diff --git a/includes/ft_irc.hpp b/includes/ft_irc.hpp index 138b1da..d0441b9 100644 --- a/includes/ft_irc.hpp +++ b/includes/ft_irc.hpp @@ -6,13 +6,17 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/01 17:27:37 by apommier #+# #+# */ -/* Updated: 2023/02/12 21:10:18 by apommier ### ########.fr */ +/* Updated: 2023/02/13 19:48:40 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #pragma once #include //socket function + +#include //inet +#include + #include #include //std::string #include //errno @@ -85,7 +89,9 @@ struct clientData //each client have one { bool registered; - clientData() { registered = 0; } + struct sockaddr_in addr; + std::string ip; + std::string nickname; std::string password; @@ -101,6 +107,8 @@ struct clientData //each client have one int fd; int op; + clientData() : registered(0), op(0) {} + // { registered = 0; op = 0;} }; struct channelData //each chan have one @@ -157,6 +165,7 @@ 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); +int not_contain_other(std::string str, std::string toFind); /* ************************************************************************** */ /* *******************************AUTH UTILS********************************* */ @@ -200,6 +209,7 @@ int epoll_start(); //2nd void new_connection(fdList &allFds); bool clientRequest(fdList &allFds, int userNbr); +void connect_client(fdList &allFds, int userNbr); /* ************************************************************************** */ /* ***************************COMMANDS PARSING******************************* */ diff --git a/srcs/client_request.cpp b/srcs/client_request.cpp index d0dc866..773bbb7 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/12 21:40:10 by apommier ### ########.fr */ +/* Updated: 2023/02/13 19:21:07 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,6 +18,7 @@ bool clientRequest(fdList &allFds, int userNbr)//, char buf[1024] = {0}; std::string buffer; size_t len = 1024; + int ret = 0; //buf.reserve(1024); //se demerder pour join quand pas \n @@ -27,9 +28,10 @@ bool clientRequest(fdList &allFds, int userNbr)//, //std::cout << "client request!" << std::endl; //if (recv(allFds.userData[userNbr].fd, buf, len, 0) == -1) - if (recv(allFds.userData[userNbr].fd, buf, len, 0) == -1) + if ((ret = recv(allFds.userData[userNbr].fd, buf, len, 0)) == -1) ft_error("recv() error"); buffer = buf; + buffer[ret] = 0; if (buffer.empty()) { //delete client @@ -42,6 +44,10 @@ bool clientRequest(fdList &allFds, int userNbr)//, return (1); } std::cout << "BUFFER: ---" << buf << "---" << std::endl; + // for (int i = 0; buffer[i]; i++) + // { + // std::cout << i << " = " << (int)buffer[i] << std::endl; + // } //split with \n and while (tab de split) -> parsing @@ -49,7 +55,7 @@ bool clientRequest(fdList &allFds, int userNbr)//, split_but_keep(buffer, '\n', splitBuff); for (size_t i = 0; i < splitBuff.size(); i++) { - parse_commands(splitBuff[i], allFds, userNbr); + parse_commands(splitBuff[i], allFds, userNbr); } return (1); diff --git a/srcs/commands/auth/auth_utils.cpp b/srcs/commands/auth/auth_utils.cpp index 1c6e5ca..adae48a 100644 --- a/srcs/commands/auth/auth_utils.cpp +++ b/srcs/commands/auth/auth_utils.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/07 14:45:45 by apommier #+# #+# */ -/* Updated: 2023/02/11 10:40:42 by apommier ### ########.fr */ +/* Updated: 2023/02/13 12:54:35 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,13 +14,41 @@ void print_registered_msg(fdList &allFds, int userNbr) { - ft_putstr_fd(allFds.userData[userNbr].fd, "-------------------WELCOME TO MY PERSONNAL IRC SERVER!-------------------" ); - ft_putstr_fd(allFds.userData[userNbr].fd, "your nickname is |" + allFds.userData[userNbr].nickname ); - ft_putstr_fd(allFds.userData[userNbr].fd, "your password is |" + allFds.userData[userNbr].password ); - ft_putstr_fd(allFds.userData[userNbr].fd, "your username is |" + allFds.userData[userNbr].userName ); - ft_putstr_fd(allFds.userData[userNbr].fd, "your realname is |" + allFds.userData[userNbr].realName ); - ft_putstr_fd(allFds.userData[userNbr].fd, "your hostname is |" + allFds.userData[userNbr].hostName ); - ft_putstr_fd(allFds.userData[userNbr].fd, "your servername is |" + allFds.userData[userNbr].serverName ); + (void)allFds; + (void)userNbr; + + std::string msg; + msg = ":irc.local 001 " + allFds.userData[userNbr].nickname + " : Welcome to the Internet Relay Network " + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].hostName + "\n"; + send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0); + msg = ":irc.local 002 " + allFds.userData[userNbr].nickname + " : Your host is irc.local" + ", running version InspIRCd-3\n"; //+ allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].hostName; + send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0); + msg = ":irc.local 003 " + allFds.userData[userNbr].nickname + " : This server was created " + "09:58:11 Feb 13 2023\n";//; + send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0); + msg = ":irc.local 004 " + allFds.userData[userNbr].nickname + "irc.local " + "InspIRCd-3 " + "iosw " + "biklmnopstv\n"; + // !@" + // 002 RPL_YOURHOST + // "Your host is , running version " + // 003 RPL_CREATED + // "This server was created " + // 004 RPL_MYINFO + // " + // " + + + // ft_putstr_fd(allFds.userData[userNbr].fd, "-------------------WELCOME TO MY PERSONNAL IRC SERVER!-------------------" ); + // ft_putstr_fd(allFds.userData[userNbr].fd, "your nickname is |" + allFds.userData[userNbr].nickname ); + // ft_putstr_fd(allFds.userData[userNbr].fd, "your password is |" + allFds.userData[userNbr].password ); + // ft_putstr_fd(allFds.userData[userNbr].fd, "your username is |" + allFds.userData[userNbr].userName ); + // ft_putstr_fd(allFds.userData[userNbr].fd, "your realname is |" + allFds.userData[userNbr].realName ); + // ft_putstr_fd(allFds.userData[userNbr].fd, "your hostname is |" + allFds.userData[userNbr].hostName ); + // ft_putstr_fd(allFds.userData[userNbr].fd, "your servername is |" + allFds.userData[userNbr].serverName ); } // void delete_client(fdList &allFds) diff --git a/srcs/commands/auth/connect_client.cpp b/srcs/commands/auth/connect_client.cpp new file mode 100644 index 0000000..91aaa08 --- /dev/null +++ b/srcs/commands/auth/connect_client.cpp @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* connect_client.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/02/12 23:30:11 by apommier #+# #+# */ +/* Updated: 2023/02/13 11:04:52 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../../includes/ft_irc.hpp" + +void connect_client(fdList &allFds, int userNbr) +{ + // allFds.userData[userNbr].fd + std::cout << "connect client start\n"; + // if (-1 == connect(allFds.userData[userNbr].fd, (struct sockaddr *)&allFds.userData[userNbr].addr, sizeof(allFds.userData[userNbr].addr))) + // ft_error("connect() error"); + + allFds.userData[userNbr].registered = 1; + print_registered_msg(allFds, userNbr); + std::cout << "connect client end\n"; + //ft_putstr_fd(allFds.userData[userNbr].fd, ":irc.local NOTICE kinou :*** Could not resolve your hostname: Request timed out; using your IP address (172.17.0.1) instead.\nirc.local 376 kinou :End of message of the day."); +} \ No newline at end of file diff --git a/srcs/commands/auth/nick.cpp b/srcs/commands/auth/nick.cpp index 318a8d5..4909123 100644 --- a/srcs/commands/auth/nick.cpp +++ b/srcs/commands/auth/nick.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/06 14:28:38 by apommier #+# #+# */ -/* Updated: 2023/02/09 13:19:51 by apommier ### ########.fr */ +/* Updated: 2023/02/12 23:37:37 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -31,8 +31,9 @@ void NICK(std::string buffer, fdList &allFds, int userNbr) allFds.userData[userNbr].nickname = splitBuff[1]; if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty()) { - allFds.userData[userNbr].registered = 1; - print_registered_msg(allFds, userNbr); + connect_client(allFds, userNbr); + // allFds.userData[userNbr].registered = 1; + // print_registered_msg(allFds, userNbr); } return ; diff --git a/srcs/commands/auth/pass.cpp b/srcs/commands/auth/pass.cpp index 02b8a9d..15affd0 100644 --- a/srcs/commands/auth/pass.cpp +++ b/srcs/commands/auth/pass.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/06 14:40:42 by apommier #+# #+# */ -/* Updated: 2023/02/09 13:20:00 by apommier ### ########.fr */ +/* Updated: 2023/02/13 17:33:51 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,6 +16,12 @@ void PASS(std::string buffer, fdList &allFds, int userNbr) { std::string password; + + if (allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\n"); + return ; + } if (buffer.size() < 6)// ---PASS --- { cmd_error(allFds, allFds.userData[userNbr].fd, "461 * PASS :Not enough parameters\n"); @@ -25,14 +31,10 @@ void PASS(std::string buffer, fdList &allFds, int userNbr) // if (splitBuff.size() != 2) // { // cmd_error(allFds, userNbr, "461 * PASS :Not enough parameters"); - // //write(allFds.userData[userNbr].fd, "ERR_NEEDMOREPARAMS", 18); + // //write(allFds.userData[userNbr].fd, "ERR_NEEDMOREPARAMS", 18); // return ; // } - else if (allFds.userData[userNbr].registered) - { - cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\n"); - return ; - } + password = buffer.substr(5, buffer.npos); allFds.userData[userNbr].password = buffer; } \ No newline at end of file diff --git a/srcs/commands/auth/user.cpp b/srcs/commands/auth/user.cpp index c737ad6..694738c 100644 --- a/srcs/commands/auth/user.cpp +++ b/srcs/commands/auth/user.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/06 14:40:39 by apommier #+# #+# */ -/* Updated: 2023/02/12 16:26:48 by apommier ### ########.fr */ +/* Updated: 2023/02/13 20:05:39 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,32 +17,6 @@ //ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED - -struct modeChan -{ - bool o; - bool p; - bool s; - bool i; - bool t; - bool n; - bool m; - bool l; - bool b; - bool v; - bool k; -}; - -struct modeUser -{ - bool i; - bool s; - bool w; - bool o; -}; - - - void USER(std::string buffer, fdList &allFds, int userNbr) { if (allFds.userData[userNbr].registered == 1) @@ -72,7 +46,8 @@ void USER(std::string buffer, fdList &allFds, int userNbr) allFds.userData[userNbr].realName = realName; if (!allFds.userData[userNbr].nickname.empty()) { - allFds.userData[userNbr].registered = 1; - print_registered_msg(allFds, userNbr); + connect_client(allFds, userNbr); + // allFds.userData[userNbr].registered = 1; + // print_registered_msg(allFds, userNbr); } } \ No newline at end of file diff --git a/srcs/commands/channel/channel_utils.cpp b/srcs/commands/channel/channel_utils.cpp index 4319204..9ced785 100644 --- a/srcs/commands/channel/channel_utils.cpp +++ b/srcs/commands/channel/channel_utils.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/09 17:21:57 by apommier #+# #+# */ -/* Updated: 2023/02/12 15:23:10 by apommier ### ########.fr */ +/* Updated: 2023/02/13 17:45:33 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,11 +16,11 @@ int find_channel(fdList &allFds, std::string chanName)//return channel nbr { std::_List_iterator start = allFds.channelList.begin(); std::_List_iterator pastEnd = allFds.channelList.end(); - std::cout << "name1= ---" << chanName << "---\n"; + //std::cout << "name1= ---" << chanName << "---\n"; while (start != pastEnd) { - std::cout << "result in find chan = " << pastEnd - start << std::endl; - std::cout << "name2= ---" << allFds.channelList[pastEnd - start - 1].name << "---\n"; + //std::cout << "result in find chan = " << pastEnd - start << std::endl; + std::cout << "test = " << allFds.channelList[pastEnd - start - 1].name << "---\n"; if (allFds.channelList[pastEnd - start - 1].name == chanName) return (pastEnd - start - 1); start++; diff --git a/srcs/commands/channel/join.cpp b/srcs/commands/channel/join.cpp index 97b12d6..4e92477 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 22:03:21 by apommier ### ########.fr */ +/* Updated: 2023/02/13 20:21:28 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -69,17 +69,33 @@ int chan_check(fdList &allFds, int userNbr, int chanNbr, std::vector splitBuff; int chanNbr; + channelData joined_chan; 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 + cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not registered\n"); //ERR_NEEDMOREPARAMS return ; } split(buffer, ' ', splitBuff); @@ -108,9 +124,7 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr) allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList[chanNbr]); //add chan in user data allFds.channelList[chanNbr].userList.push_back(&allFds.userData[userNbr]);//add user in chan data allFds.channelList[chanNbr].nbrUser++; - //std::cout << "join2 nickname " << allFds.channelList.back().userList[0]->nickname << std::endl; - //std::cout << "join2 fd " << allFds.channelList.back().userList[0]->nickname << std::endl; - //message nickname joined the channel? + joined_chan = *(allFds.userData[userNbr].joinedChan.back()); } else //chan doesn't exist yet { @@ -121,11 +135,16 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr) new_chan.nbrUser = 1; new_chan.userList.push_back(&allFds.userData[userNbr]); //new_chan.userList - + joined_chan = new_chan; allFds.channelList.push_back(new_chan); allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList.back());//add chan in user data - //std::cout << "join nickname " << allFds.channelList[0].userList[0]->nickname << std::endl; - //std::cout << "join fd " << allFds.channelList[0].userList[0]->fd << std::endl; - //message nickname created the channel? } + for (int i = 0; i < joined_chan.nbrUser; i++) + { + std::string fullMsg; + fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " JOIN :" + joined_chan.name + "\n"; + send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0); + std::cout << "loop here\n"; + } + //send 352 and 315 or 353 and 366 (WHO or NAME) } \ No newline at end of file diff --git a/srcs/commands/channel/privmsg.cpp b/srcs/commands/channel/privmsg.cpp index 1a64a08..6525620 100644 --- a/srcs/commands/channel/privmsg.cpp +++ b/srcs/commands/channel/privmsg.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 08:53:03 by apommier #+# #+# */ -/* Updated: 2023/02/11 12:38:51 by apommier ### ########.fr */ +/* Updated: 2023/02/13 20:28:11 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,6 +18,7 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr) std::vector splitBuff; std::string msg; + std::cout << "privmsg bufer= --" << buffer << std::endl; split(buffer, ' ', splitBuff); if (splitBuff.size() < 3) { @@ -26,27 +27,36 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr) return ; } - for (size_t i = 2; i < splitBuff.size(); i++) - { - msg += (" " + splitBuff[i]); - } + // for (size_t i = 2; i < splitBuff.size(); i++) + // { + // msg += (" " + splitBuff[i]); + // } + //msg = buffer.substr(buffer.find(':') + 1, std::string::npos); + std::cout << "privmsg =" << msg << std::endl; std::vector dest; split(splitBuff[1], ',', dest); for (size_t i = 0; i < dest.size(); i++) { - send_msg(allFds, msg, dest[i], userNbr); + // std::cout << "dest[i] =" << dest[i] << "|" << std::endl; + // std::cout << "dest[i] =" << dest[i] << "|" << std::endl; + // std::cout << "dest[i] =" << dest[i] << "|" << std::endl; + // std::cout << "chan =" << allFds.channelList[0].name << "|" << std::endl; + // std::cout << "chan =" << allFds.channelList[0].name << "|" << std::endl; + // std::cout << "chan =" << allFds.channelList[0].name << "|" << std::endl; + // std::cout << "result =" << (allFds.channelList[0].name == dest[i]) << "|" << std::endl; + send_msg(allFds, buffer, dest[i], userNbr); } } void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr) { - int fd; + int pos; //find dest std::string fullMsg; - fullMsg = "*" + allFds.userData[userNbr].nickname + "* " + msg; - fd = find_channel(allFds, dest); //return channel nbr - if (fd != -1) + //fullMsg = "*" + allFds.userData[userNbr].nickname + "* " + msg; + pos = find_channel(allFds, dest); //return channel nbr + if (pos != -1) { //std::vector::iterator start = allFds.channelList[fd].userList.begin(); //std::vector::iterator pastEnd = allFds.channelList[fd].userList.end(); @@ -57,19 +67,23 @@ void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr) // start++; // std::cout << "loop here\n"; // } - for (size_t i = 0; i < allFds.channelList[fd].userList.size(); i++) + for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++) { - std::cout << "send nickname " << allFds.channelList[fd].userList[i]->nickname << std::endl; - ft_putstr_fd(allFds.channelList[fd].userList[i]->fd, fullMsg); + std::cout << "send nickname " << allFds.channelList[pos].userList[i]->nickname << std::endl; + //ft_putstr_fd(allFds.channelList[fd].userList[i]->fd, fullMsg); + fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\n"; + //:kinou2!kinou@172.17.0.1 PRIVMSG #test :cc + //send(allFds.channelList[pos].userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0); + send(allFds.channelList[pos].userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0); std::cout << "loop here\n"; } return ; } - fd = find_user(allFds, dest); //return direct user fd - if (fd != -1) + pos = find_user(allFds, dest); //return direct user fd + if (pos != -1) { - ft_putstr_fd(fd, fullMsg); + ft_putstr_fd(pos, fullMsg); return ; } std::cout << "error msg\n"; diff --git a/srcs/commands/cmd_utils.cpp b/srcs/commands/cmd_utils.cpp index 2aab5db..e70bd73 100644 --- a/srcs/commands/cmd_utils.cpp +++ b/srcs/commands/cmd_utils.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/10 15:46:10 by apommier #+# #+# */ -/* Updated: 2023/02/11 13:51:28 by apommier ### ########.fr */ +/* Updated: 2023/02/13 18:22:37 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,7 +16,7 @@ void split(std::string const &str, const char delim, std::vector &o { size_t start; size_t end = 0; - + while ((start = str.find_first_not_of(delim, end)) != std::string::npos) { end = str.find(delim, start); diff --git a/srcs/commands/not_done_cmd.cpp b/srcs/commands/not_done_cmd.cpp index 0e67271..c108255 100644 --- a/srcs/commands/not_done_cmd.cpp +++ b/srcs/commands/not_done_cmd.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/09 22:04:11 by apommier #+# #+# */ -/* Updated: 2023/02/12 17:30:37 by apommier ### ########.fr */ +/* Updated: 2023/02/13 16:32:24 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -171,21 +171,15 @@ void KILL(std::string buffer, fdList &allFds, int userNbr) return ; } -void PING(std::string buffer, fdList &allFds, int userNbr) -{ - (void)buffer; - (void)allFds; - (void)userNbr; - return ; -} +// void PING(std::string buffer, fdList &allFds, int userNbr) +// { +// (void)buffer; +// (void)allFds; +// (void)userNbr; +// return ; +// } + -void PONG(std::string buffer, fdList &allFds, int userNbr) -{ - (void)buffer; - (void)allFds; - (void)userNbr; - return ; -} void ERROR(std::string buffer, fdList &allFds, int userNbr) { diff --git a/srcs/commands/other/ping_pong.cpp b/srcs/commands/other/ping_pong.cpp new file mode 100644 index 0000000..555a0c6 --- /dev/null +++ b/srcs/commands/other/ping_pong.cpp @@ -0,0 +1,64 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ping_pong.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/02/13 00:16:27 by apommier #+# #+# */ +/* Updated: 2023/02/13 22:54:14 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../../includes/ft_irc.hpp" + + +// void ft_putstr_fd(int fd, std::string str) +// { +// write(fd, str.c_str(), str.size()); +// write(fd, "\n", 1); +// } + +void PONG(std::string buffer, fdList &allFds, int userNbr) +{ + (void)buffer; + (void)allFds; + (void)userNbr; + + std::string msg; + std::vector splitBuff; + split(buffer, ' ', splitBuff); + msg = ":irc.local PONG irc.local :irc.local"; + // ":irc.local PONG irc.local :irc.local" + send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0); + // if (splitBuff.size() < 2) + // { + // cmd_error(allFds, allFds.userData[userNbr].fd, "431 * NICK :No nickname given\n"); + // //write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18); + // return ; + // } + + return ; +} + +void PING(std::string buffer, fdList &allFds, int userNbr) +{ + (void)buffer; + (void)allFds; + (void)userNbr; + + + std::string msg; + std::vector splitBuff; + split(buffer, ' ', splitBuff); + msg = ":irc.local PONG irc.local :irc.local"; + send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0); + // if (splitBuff.size() < 2) + // { + // cmd_error(allFds, allFds.userData[userNbr].fd, "431 * NICK :No nickname given\n"); + // //write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18); + // return ; + // } + + return ; +} \ No newline at end of file diff --git a/srcs/commands/parse_commands.cpp b/srcs/commands/parse_commands.cpp index d141004..e6dfbec 100644 --- a/srcs/commands/parse_commands.cpp +++ b/srcs/commands/parse_commands.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 22:01:25 by apommier #+# #+# */ -/* Updated: 2023/02/12 16:19:20 by apommier ### ########.fr */ +/* Updated: 2023/02/13 19:44:43 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,6 +24,17 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr) std::cout << "===========parse command=============" << std::endl; std::vector splitBuff; int a = 0; + + if (buffer.find(13) != std::string::npos) //change that pls + { + std::cout << "pos of bitch= " << buffer.find(13) << std::endl; + std::cout << "size= " << buffer.size() << std::endl; + if (buffer.find(13) != buffer.size() - 2) + std::cout << "BE CAREFUL CHAR 10 (line feed) not at end\n"; + buffer.erase(buffer.find(13), 1); + } + + allFds.userData[userNbr].cmdBuffer += buffer; if (allFds.userData[userNbr].cmdBuffer.find('\n') == std::string::npos) @@ -39,8 +50,6 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr) std::cout << "Command not found\n"; else { - //std::cout << "Command name = " << allFds.parsingTab.cmdName[a] << std::endl; - //std::cout << "Command nbr = " << a << std::endl; allFds.parsingTab.cmdPtr[a](allFds.userData[userNbr].cmdBuffer, allFds, userNbr); //allFds.parsingTab.cmdPtr[a] //JOIN(allFds.userData[userNbr].cmdBuffer, allFds, userNbr); diff --git a/srcs/delete_user.cpp b/srcs/delete_user.cpp index 3ca330b..84ce69b 100644 --- a/srcs/delete_user.cpp +++ b/srcs/delete_user.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/12 20:38:50 by apommier #+# #+# */ -/* Updated: 2023/02/12 20:39:10 by apommier ### ########.fr */ +/* Updated: 2023/02/13 20:25:45 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,6 +18,7 @@ void del_user_in_chan(clientData *user, channelData *chan) for (i = 0; user != chan->userList[i]; i++) ; chan->userList.erase(chan->userList.begin() + i); + chan->nbrUser--; } void delete_user(fdList &allFds, int userNbr) diff --git a/srcs/main.cpp b/srcs/main.cpp index e170bd4..cd5f6d5 100644 --- a/srcs/main.cpp +++ b/srcs/main.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/01 17:27:33 by apommier #+# #+# */ -/* Updated: 2023/02/09 14:39:07 by apommier ### ########.fr */ +/* Updated: 2023/02/12 22:35:11 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,7 +15,11 @@ int main(int ac, char **av) { if (!(ac == 3 || ac == 2)) - ft_error("wrong number of arguments\nFORMAT: ./ircserv "); + { + //ft_error("wrong number of arguments\nFORMAT: ./ircserv "); + std::cout << "wrong number of arguments\nFORMAT: ./ircserv \n"; + exit(1); + } std::cout << "============Homemade IRC Server start============" << std::endl; // try // { diff --git a/srcs/new_connection.cpp b/srcs/new_connection.cpp index 86f03e0..66f68c9 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 21:42:07 by apommier ### ########.fr */ +/* Updated: 2023/02/13 19:46:41 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -44,7 +44,9 @@ void new_connection(fdList &allFds) clientData newElement; newElement.fd = newFd; - newElement.op = 0; + newElement.addr = addr; + newElement.ip = inet_ntoa(addr.sin_addr); + //newElement.op = 0; allFds.userData.push_back(newElement); //allFds.userData[allFds.nbrUser].fd = allFds.userList[allFds.nbrUser]; //std::cout << "newConnection | user in data fd = " << allFds.userData[allFds.nbrUser].fd << std::endl; diff --git a/srcs/server_loop.cpp b/srcs/server_loop.cpp index ac486b2..35e278e 100644 --- a/srcs/server_loop.cpp +++ b/srcs/server_loop.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 21:58:13 by apommier #+# #+# */ -/* Updated: 2023/02/12 14:21:04 by apommier ### ########.fr */ +/* Updated: 2023/02/13 16:47:16 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,10 +26,11 @@ void start_loop(fdList &allFds) std::cout << "serverFd: " << allFds.serverFd << std::endl; while (allFds.alive) { - //std::cout << "loop" << std::endl; + //std::cout << "\n\n\nwhile alive event loop" << std::endl; //std::cout << "in loop nbr user = " << allFds.nbrUser << std::endl; eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 5000); + //std::cout << "eventNbr = " << eventNbr << std::endl; //std::cout << "eventNbr: " << eventNbr << std::endl; //std::cout << "in loop adress " << &allFds << std::endl; for (i = 0; i < eventNbr ; i++) diff --git a/srcs/start_server.cpp b/srcs/start_server.cpp index 3bdbd1f..0c2a1d7 100644 --- a/srcs/start_server.cpp +++ b/srcs/start_server.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 21:44:20 by apommier #+# #+# */ -/* Updated: 2023/02/12 15:00:19 by apommier ### ########.fr */ +/* Updated: 2023/02/13 00:04:55 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -46,7 +46,7 @@ void initialize(char **av) ft_error("wrong format for \nneed to be an positive integer"); if (bind(allFds.serverFd, (struct sockaddr *)&addr, sizeof(addr)) < 0) ft_error("bind() error"); - if (listen(allFds.serverFd, 100) == -1) + if (listen(allFds.serverFd, 10) == -1) ft_error("listen() error"); // newSockFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen); diff --git a/srcs/utils.cpp b/srcs/utils.cpp index 5fcd499..d3e2c67 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 20:52:45 by apommier ### ########.fr */ +/* Updated: 2023/02/13 10:52:07 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,7 +17,7 @@ void ft_error(std::string str) std::cerr << str << std::endl; if (errno) { - std::cerr << "errno: " << strerror(errno); + std::cerr << "errno: " << strerror(errno) << std::endl; exit(errno); } exit(1); @@ -31,20 +31,24 @@ void close_fd(int fd) void ft_putstr_fd(int fd, std::string str) { - write(fd, str.c_str(), str.size()); - write(fd, "\n", 1); + // write(fd, str.c_str(), str.size()); + // write(fd, "\n", 1); + str += "\n"; + send(fd, str.c_str(), str.size(), 0); } void cmd_error(fdList &allFds, int fd, std::string error) { (void)allFds; //to delete - write(fd, ":irc.local ", 11); - write(fd, error.c_str(), error.size()); + error = ":irc.local " + error; + //write(fd, ":irc.local ", 11); + //write(fd, error.c_str(), error.size()); + send(fd, error.c_str(), error.size(), 0); } int contain_any(std::string str, std::string toFind) { - for (int i = 0; toFind[i] != -1; i++) + for (int i = 0; toFind[i] != 0; i++) { if (str.find(toFind[i]) != std::string::npos) return (1); @@ -52,6 +56,16 @@ int contain_any(std::string str, std::string toFind) return (0); } +int not_contain_other(std::string str, std::string toFind) +{ + for (int i = 0; str[i] != 0; i++) + { + if (toFind.find(str[i]) == std::string::npos) + return (0); + } + return (1); +} + // void find_user_in_chan(fdList &allFds, channelData *chan) // {