diff --git a/Makefile b/Makefile index 5e1611f..242b67d 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/12/01 17:27:29 by apommier #+# #+# # -# Updated: 2023/02/13 00:20:18 by apommier ### ########.fr # +# Updated: 2023/02/14 22:21:45 by apommier ### ########.fr # # # # **************************************************************************** # @@ -32,9 +32,9 @@ SRCS := main.cpp\ commands/channel/channel_utils.cpp\ commands/channel/join.cpp\ commands/channel/privmsg.cpp\ + commands/channel/notice.cpp\ \ commands/other/quit.cpp\ - commands/other/squit.cpp\ commands/other/ping_pong.cpp\ \ commands/channel_op/invite.cpp\ @@ -42,6 +42,7 @@ SRCS := main.cpp\ commands/channel_op/mode.cpp\ commands/channel_op/topic.cpp\ \ + commands/operator/squit.cpp\ commands/operator/oper.cpp\ \ commands/not_done_cmd.cpp #special (temporary) diff --git a/includes/ft_irc.hpp b/includes/ft_irc.hpp index d0441b9..ce5229c 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/13 19:48:40 by apommier ### ########.fr */ +/* Updated: 2023/02/15 00:16:02 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,7 +17,10 @@ #include //inet #include -#include +#include +#include + +#include #include //std::string #include //errno #include //std::cout | cerr @@ -37,6 +40,14 @@ #define READ_SIZE 10 #define CMD_NBR 10 + + // if (!allFds.userData[userNbr].registered) + // { + // /*change error*/ + // cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not registered\n"); //ERR_NEEDMOREPARAMS + // return ; + // } + /* ************************************************************************** */ /* *********************************STRUCT*********************************** */ /* ************************************************************************** */ @@ -139,7 +150,8 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY accessList userData; int alive; - + std::string password; + std::string creation_date; int nbrUser; functionTab parsingTab; }; @@ -185,6 +197,7 @@ void split_but_keep(std::string const &str, const char delim, std::vector +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/07 14:45:45 by apommier #+# #+# */ -/* Updated: 2023/02/13 12:54:35 by apommier ### ########.fr */ +/* Updated: 2023/02/15 00:14:50 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../../includes/ft_irc.hpp" -void print_registered_msg(fdList &allFds, int userNbr) -{ - (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 index 91aaa08..45ffe45 100644 --- a/srcs/commands/auth/connect_client.cpp +++ b/srcs/commands/auth/connect_client.cpp @@ -6,19 +6,64 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/12 23:30:11 by apommier #+# #+# */ -/* Updated: 2023/02/13 11:04:52 by apommier ### ########.fr */ +/* Updated: 2023/02/15 00:15:32 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../../includes/ft_irc.hpp" +void print_registered_msg(fdList &allFds, int userNbr) +{ + (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 " + allFds.creation_date + "\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 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"); + if (allFds.userData[userNbr].password.empty() || allFds.userData[userNbr].password != allFds.password) + { + std::cout << "password= " << allFds.userData[userNbr].password << std::endl; + cmd_error(allFds, allFds.userData[userNbr].fd, "464 * :Password incorrect\n"); + return ; + } + //464 ERR_PASSWDMISMATCH + //":Password incorrect" + allFds.userData[userNbr].registered = 1; print_registered_msg(allFds, userNbr); std::cout << "connect client end\n"; diff --git a/srcs/commands/auth/nick.cpp b/srcs/commands/auth/nick.cpp index 4909123..199603c 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/12 23:37:37 by apommier ### ########.fr */ +/* Updated: 2023/02/15 15:41:43 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,13 +23,22 @@ void NICK(std::string buffer, fdList &allFds, int userNbr) 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 ; + } + if (!not_contain_other(splitBuff[1], "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`|^_-{}[]\\")) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "432 * " + splitBuff[1] + " :Erroneous nickname\n"); + return ; + } + if (find_user(allFds, splitBuff[1]) != -1) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "433 * " + splitBuff[1] + " :Nickname is already in use\n"); return ; } //if nickname ok then (another user has it? ) //ERR_NONICKNAMEGIVEN allFds.userData[userNbr].nickname = splitBuff[1]; - if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty()) + if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty() /*&& !allFds.userData[userNbr].password.empty()*/) { connect_client(allFds, userNbr); // allFds.userData[userNbr].registered = 1; diff --git a/srcs/commands/auth/pass.cpp b/srcs/commands/auth/pass.cpp index 15affd0..19cc4b2 100644 --- a/srcs/commands/auth/pass.cpp +++ b/srcs/commands/auth/pass.cpp @@ -6,27 +6,29 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/06 14:40:42 by apommier #+# #+# */ -/* Updated: 2023/02/13 17:33:51 by apommier ### ########.fr */ +/* Updated: 2023/02/15 15:42:16 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../../includes/ft_irc.hpp" + + 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"); return ; } + if (allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\n"); + return ; + } // if (splitBuff.size() != 2) // { @@ -36,5 +38,12 @@ void PASS(std::string buffer, fdList &allFds, int userNbr) // } password = buffer.substr(5, buffer.npos); - allFds.userData[userNbr].password = buffer; + allFds.userData[userNbr].password = password; + + if (!allFds.userData[userNbr].userName.empty() && !allFds.userData[userNbr].nickname.empty()) + { + 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/auth/user.cpp b/srcs/commands/auth/user.cpp index 694738c..bd81e11 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/13 20:05:39 by apommier ### ########.fr */ +/* Updated: 2023/02/14 01:25:22 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -44,7 +44,7 @@ void USER(std::string buffer, fdList &allFds, int userNbr) allFds.userData[userNbr].serverName = splitBuff[3]; allFds.userData[userNbr].realName = realName; - if (!allFds.userData[userNbr].nickname.empty()) + if (!allFds.userData[userNbr].nickname.empty() /*&& !allFds.userData[userNbr].password.empty()*/) { connect_client(allFds, userNbr); // allFds.userData[userNbr].registered = 1; diff --git a/srcs/commands/channel/channel_utils.cpp b/srcs/commands/channel/channel_utils.cpp index 9ced785..a3fb99a 100644 --- a/srcs/commands/channel/channel_utils.cpp +++ b/srcs/commands/channel/channel_utils.cpp @@ -6,12 +6,29 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/09 17:21:57 by apommier #+# #+# */ -/* Updated: 2023/02/13 17:45:33 by apommier ### ########.fr */ +/* Updated: 2023/02/14 20:13:38 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../../includes/ft_irc.hpp" +int is_joined(fdList &allFds, std::string chanName, int userNbr) +{ + std::vector::iterator start = allFds.userData[userNbr].joinedChan.begin(); + std::vector::iterator pastEnd = allFds.userData[userNbr].joinedChan.end(); + //std::cout << "name1= ---" << chanName << "---\n"; + while (start != pastEnd) + { + //std::cout << "result in find chan = " << pastEnd - start << std::endl; + std::cout << "test = " << allFds.userData[userNbr].joinedChan[pastEnd - start - 1]->name << "---\n"; + if (allFds.userData[userNbr].joinedChan[pastEnd - start - 1]->name == chanName) + return (pastEnd - start - 1); + start++; + } + std::cout << "chan not found\n"; + return (-1); +} + int find_channel(fdList &allFds, std::string chanName)//return channel nbr { std::_List_iterator start = allFds.channelList.begin(); @@ -39,7 +56,7 @@ int find_user(fdList &allFds, std::string userName)//return direct user fd std::cout << "result in find user = " << pastEnd - start << std::endl; std::cout << "name2= ---" << allFds.userData[pastEnd - start - 1].nickname << "---\n"; if (allFds.userData[pastEnd - start - 1].nickname == userName) - return (allFds.userData[pastEnd - start - 1].fd); + return (pastEnd - start - 1); start++; } std::cout << "user not found\n"; diff --git a/srcs/commands/channel/join.cpp b/srcs/commands/channel/join.cpp index 4e92477..fd11e0d 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/13 20:21:28 by apommier ### ########.fr */ +/* Updated: 2023/02/14 14:50:57 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,7 +18,7 @@ // 1459 // ERR_NEEDMOREPARAMS + ERR_BANNEDFROMCHAN // ERR_INVITEONLYCHAN + ERR_BADCHANNELKEY -// ERR_CHANNELISFULL x ERR_BADCHANMASK ? +// ERR_CHANNELISFULL x ERR_BADCHANMASK ? + // ERR_NOSUCHCHANNEL x ERR_TOOMANYCHANNELS x // RPL_TOPIC @@ -74,48 +74,11 @@ int chan_check(fdList &allFds, int userNbr, int chanNbr, std::vector splitBuff, fdList &allFds, int userNbr) { - 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 registered\n"); //ERR_NEEDMOREPARAMS - return ; - } - split(buffer, ' ', splitBuff); - if (splitBuff.size() < 2) - { - /*change error*/ - 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); - return ; - } chanNbr = find_channel(allFds, splitBuff[1]); if (chanNbr != -1) //chan already exist { @@ -146,5 +109,54 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr) send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0); std::cout << "loop here\n"; } + // if (chanNbr == -1) + // { + + // } +} + + + + + + + + + +void JOIN(std::string buffer, fdList &allFds, int userNbr) +{ + std::vector splitBuff; + std::string msg; + 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 registered\n"); //ERR_NEEDMOREPARAMS + return ; + } + split(buffer, ' ', splitBuff); + if (splitBuff.size() < 2) + { + /*change error*/ + 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] != '&') + { + //error bad channel name + msg = "476 * JOIN " + splitBuff[1] + " ::Bad Channel Mask\n"; + cmd_error(allFds, allFds.userData[userNbr].fd, msg); + //:Bad Channel Mask + return ; + } + if (splitBuff[1] == "0") + { + leave_all(allFds, userNbr); + return ; + } + join_or_create(splitBuff, allFds, userNbr); //send 352 and 315 or 353 and 366 (WHO or NAME) } \ No newline at end of file diff --git a/srcs/commands/channel/notice.cpp b/srcs/commands/channel/notice.cpp new file mode 100644 index 0000000..cbf40c5 --- /dev/null +++ b/srcs/commands/channel/notice.cpp @@ -0,0 +1,70 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* notice.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/02/14 21:24:55 by apommier #+# #+# */ +/* Updated: 2023/02/14 21:35:45 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../../includes/ft_irc.hpp" + +// Commande: PRIVMSG +// Paramètres: {,} +// ERR_NORECIPIENT ERR_NOTEXTTOSEND + +// ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL +// ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS +// ERR_NOSUCHNICK + +// RPL_AWAY + +void send_notice_msg(fdList &allFds, std::string msg, std::string dest, int userNbr) +{ + int pos; + std::string fullMsg; + + fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\n"; + if (dest[0] == '&' || dest[0] == '#') + { + if (is_joined(allFds, dest, userNbr) == -1) + return ; + if ((pos = find_channel(allFds, dest)) == -1) + return ; + for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++) + { + std::cout << "send nickname " << allFds.channelList[pos].userList[i]->nickname << std::endl; + if (i != (size_t)userNbr) + send(allFds.channelList[pos].userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0); + std::cout << "loop here\n"; + } + return ; + } + pos = find_user(allFds, dest); //return direct user fd + if (pos != -1) + { + send(allFds.userData[pos].fd, fullMsg.c_str(), fullMsg.size(), 0); + return ; + } +} + +void NOTICE(std::string buffer, fdList &allFds, int userNbr) +{ + std::vector splitBuff; + std::string msg; + + std::cout << "notice bufer= --" << buffer << std::endl; + split(buffer, ' ', splitBuff); + if (splitBuff.size() < 2) + return ; + if (splitBuff.size() < 3) + return ; + + std::cout << "notice =" << msg << std::endl; + std::vector dest; + split(splitBuff[1], ',', dest); + for (size_t i = 0; i < dest.size(); i++) + send_notice_msg(allFds, buffer, dest[i], userNbr); +} + diff --git a/srcs/commands/channel/privmsg.cpp b/srcs/commands/channel/privmsg.cpp index 6525620..1867728 100644 --- a/srcs/commands/channel/privmsg.cpp +++ b/srcs/commands/channel/privmsg.cpp @@ -6,12 +6,19 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 08:53:03 by apommier #+# #+# */ -/* Updated: 2023/02/13 20:28:11 by apommier ### ########.fr */ +/* Updated: 2023/02/15 15:18:38 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../../includes/ft_irc.hpp" +// Commande: PRIVMSG +// Paramètres: {,} +// ERR_NORECIPIENT ERR_NOTEXTTOSEND + +// ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL +// ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS +// ERR_NOSUCHNICK + +// RPL_AWAY void PRIVMSG(std::string buffer, fdList &allFds, int userNbr) { @@ -20,72 +27,55 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr) std::cout << "privmsg bufer= --" << buffer << std::endl; split(buffer, ' ', splitBuff); - if (splitBuff.size() < 3) + if (splitBuff.size() < 2) { cmd_error(allFds, allFds.userData[userNbr].fd, "431 * PRIVMSG :Not enought argument\n"); - //write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18); return ; } - - // for (size_t i = 2; i < splitBuff.size(); i++) - // { - // msg += (" " + splitBuff[i]); - // } - //msg = buffer.substr(buffer.find(':') + 1, std::string::npos); + if (splitBuff.size() < 3) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "412 * PRIVMSG :No text to send\n"); + return ; + } std::cout << "privmsg =" << msg << std::endl; - std::vector dest; split(splitBuff[1], ',', dest); for (size_t i = 0; i < dest.size(); i++) - { - // 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 pos; - //find dest std::string fullMsg; - //fullMsg = "*" + allFds.userData[userNbr].nickname + "* " + msg; - pos = find_channel(allFds, dest); //return channel nbr - if (pos != -1) + + fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\n"; + if (dest[0] == '&' || dest[0] == '#') { - //std::vector::iterator start = allFds.channelList[fd].userList.begin(); - //std::vector::iterator pastEnd = allFds.channelList[fd].userList.end(); - // while (start != pastEnd) - // { - // std::cout << "send nickname" << (*start)->nickname << std::endl; - // ft_putstr_fd((*start)->fd, fullMsg); - // start++; - // std::cout << "loop here\n"; - // } + if (is_joined(allFds, dest, userNbr) == -1) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "442 * PRIVMSG " + dest + " :You're not on that channel\n"); + return ; + } + if ((pos = find_channel(allFds, dest)) == -1) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "401 * PRIVMSG " + dest + " :No such nick/channel\n"); + return ; + } for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++) { 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); + if (i != (size_t)userNbr) + send(allFds.channelList[pos].userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0); std::cout << "loop here\n"; } return ; } - pos = find_user(allFds, dest); //return direct user fd if (pos != -1) { - ft_putstr_fd(pos, fullMsg); + cmd_error(allFds, allFds.userData[userNbr].fd, "401 * PRIVMSG " + dest + " :No such nick/channel\n"); return ; } - std::cout << "error msg\n"; - //ft_putstr_fd(fd, msg); + send(allFds.userData[pos].fd, fullMsg.c_str(), fullMsg.size(), 0); } \ No newline at end of file diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index cb33edb..6dd7940 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* mode.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: sadjigui +#+ +:+ +#+ */ +/* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/02/13 00:23:55 by sadjigui ### ########.fr */ +/* Updated: 2023/02/14 23:28:49 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,7 +15,7 @@ int search_and_erase(std::string &str, std::string toFind) { // std::vector::iterator i = str.begin; - int i = 0; + int i = 1; //1 instead of 0 to skip +/- while (str[i] != 0) { if (toFind.find(str[i]) == std::string::npos) @@ -23,73 +23,130 @@ int search_and_erase(std::string &str, std::string toFind) else i++; } + std::cout << "splitbuff[2]after? = " << str << std::endl; return 1; } -void verify_option(fdList &allFds, std::string str, int i) + + +void do_chan_option(fdList &allFds, int userNbr, std::string opt /*, channel (string or direct reference or pointer but no copy)*/) { (void)allFds; - (void)i; - (void)str; - std::string find = "opsitnmlbvk"; - std::cout << "1 str = "<< str << std::endl; - search_and_erase(str, find); - std::cout << "2 str = "<< str << std::endl; - use_option(allFds, str, ) + (void)userNbr; + for (int i = 0; opt[i]; i++) + { + //call option + //switch ? if forest? map container ? 2 tab (name and function pointer) ? + // opt_i(int signe (= ou -), channel, user); + } + return; } -// int look_for_channel(fdList &allFds, std::string str) -// { -// if (allFds.chanelList[chanNbr.mode.k]) -// { -// if (splitBuff.size() < 3 || allFdschannelList[chanNbr].password != splitBuff[2]) -// { -// errorStr ="475* JOIN" + allFds.channelList[chanNbr].name+" :Cannot join channel(+k)\n"; -// cmd_error(allFds, allFds.userData[userNbr].fd, errorStr); -// } -// return 0; -// } -// } - - +void do_user_option(fdList &allFds, int userNbr, std::string opt) +{ + (void)allFds; + (void)userNbr; + for (int i = 0; opt[i]; i++) + { + //call option + //switch ? if forest? map container ? 2 tab (name and function pointer) ? + // opt_i(int signe (= ou -), user); + } + return; +} void MODE(std::string buffer, fdList &allFds, int userNbr) { - (void)buffer; - (void)allFds; (void)userNbr; - int i = 1; std::vector splitBuff; - std::cout << "---------------->" << std::endl; split(buffer, ' ', splitBuff); - std::vector::iterator ptr = splitBuff.begin(); - std::cout << "-------->" << splitBuff.size() << std::endl; - if (splitBuff.size() != 6) + if (splitBuff.size() < 3) { std::cout << "ERR_NEEDMOREPARAMS" << std::endl; return ; } - ptr++; - std::string str = *ptr; - if (str[0] == '#' || str[0] == '&') + //check if user is op? else error + //check if (splitBuff[2][0] == +/-) //splitbuff[2] always equal to {[+|-]|o|p|s|i|t|n|b|v} + //else ??? erreur j'imagine mais j'ai pas trouvé + if (splitBuff[1][0] == '#' || splitBuff[1][0] == '&') //splitbuff[1] always equal to or { - std::string cmd = str.substr(1, str.npos); - std::cout << "test = "<< str << std::endl; - if (find_channel(allFds, cmd) < 0) - std::cout << "Channel " << cmd <<" Not found" << std::endl; - while (ptr != splitBuff.end()) + if (find_channel(allFds, splitBuff[1]) == -1) //if true chan doesn't exist { - std::string str = *ptr; - if (str[0] == '#' || str[0] == '&') - { - // if (find_channel(allFds, str+1)) - std::cout << "test = "<< str << std::endl; - - } - verify_option(allFds, str, i); - ptr++; - i++; - } + std::cout << "chan doesn't exist" << std::endl; + // 403 ERR_NOSUCHCHANNEL + // " :No such channel" + return ; + }//else + //verify_option(allFds, str, i); //needed? + + std::cout << "splitbuff[2] = " << splitBuff[2] << std::endl; + + search_and_erase(splitBuff[2], "opsitnmlbvk"); + std::cout << "splitbuff[2] after = " << splitBuff[2] << std::endl; + //do_option one by one here (do_chan_opt)? + return ; } - return ; + else if ((find_user(allFds, splitBuff[1]) == -1)) + { + std::cout << "user doesn't exist" << std::endl; + // 401 ERR_NOSUCHNICK + // " :No such nick/channel" + return ; + } + search_and_erase(splitBuff[2], "iwso"); + //do_option one by one here (do_user_opt)? + } + +// void verify_option(fdList &allFds, std::string str, int i) +// { +// (void)allFds; +// (void)i; +// (void)str; +// std::string find = "opsitnmlbvk"; +// std::cout << "1 str = "<< str << std::endl; +// search_and_erase(str, find); +// std::cout << "2 str = "<< str << std::endl; +// //use_option(allFds, str, ) +// } + +// void MODE(std::string buffer, fdList &allFds, int userNbr) +// { +// (void)buffer; +// (void)allFds; +// (void)userNbr; +// int i = 1; +// std::vector splitBuff; +// std::cout << "---------------->" << std::endl; +// split(buffer, ' ', splitBuff); +// std::vector::iterator ptr = splitBuff.begin(); +// std::cout << "-------->" << splitBuff.size() << std::endl; +// if (splitBuff.size() != 6) +// { +// std::cout << "ERR_NEEDMOREPARAMS" << std::endl; +// return ; +// } +// ptr++; +// std::string str = *ptr; /*std::string str = splitBuff[1]; ⚠️ */ /*STR sert a rien |*ptr = str|*/ +// if (str[0] == '#' || str[0] == '&') +// { +// std::string cmd = str.substr(1, str.npos); //std::string cmd = (*ptr).substr(1, str.npos); //Not needed? need full channel's name with # or & +// std::cout << "test = "<< str << std::endl; //std::cout << "test = "<< *ptr << std::endl; +// if (find_channel(allFds, cmd) < 0) //find_channel(allFds, cmd) +// std::cout << "Channel " << cmd <<" Not found" << std::endl; +// while (ptr != splitBuff.end()) +// { +// std::string str = *ptr; +// if (str[0] == '#' || str[0] == '&') +// { +// // if (find_channel(allFds, str+1)) +// std::cout << "test = "<< str << std::endl; + +// } +// verify_option(allFds, str, i); +// ptr++; +// i++; +// } +// } +// return ; +// } \ No newline at end of file diff --git a/srcs/commands/not_done_cmd.cpp b/srcs/commands/not_done_cmd.cpp index c108255..22f08b2 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/13 16:32:24 by apommier ### ########.fr */ +/* Updated: 2023/02/14 21:28:14 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -131,13 +131,13 @@ void INFO(std::string buffer, fdList &allFds, int userNbr) // return ; // } -void NOTICE(std::string buffer, fdList &allFds, int userNbr) -{ - (void)buffer; - (void)allFds; - (void)userNbr; - return ; -} +// void NOTICE(std::string buffer, fdList &allFds, int userNbr) +// { +// (void)buffer; +// (void)allFds; +// (void)userNbr; +// return ; +// } void WHO(std::string buffer, fdList &allFds, int userNbr) { diff --git a/srcs/commands/operator/oper.cpp b/srcs/commands/operator/oper.cpp index 3e7d037..c5b46dc 100644 --- a/srcs/commands/operator/oper.cpp +++ b/srcs/commands/operator/oper.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:04:47 by apommier #+# #+# */ -/* Updated: 2023/02/11 20:04:53 by apommier ### ########.fr */ +/* Updated: 2023/02/15 15:23:13 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,11 +14,28 @@ void OPER(std::string buffer, fdList &allFds, int userNbr) { + int pos; std::vector splitBuff; + std::string msg; + split(buffer, ' ', splitBuff); - if (splitBuff.size() < 2) + if (splitBuff.size() < 3) { - /*change error*/cmd_error(allFds, allFds.userData[userNbr].fd, "431 * OPER :No nickname given\n"); + cmd_error(allFds, allFds.userData[userNbr].fd, "461 * OPER :Not enough parameters\n"); return ; } + if (splitBuff[2] != allFds.password) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "464 * :Password incorrect\n"); + return ; + } + pos = find_user(allFds, splitBuff[1]); //return direct user fd + if (pos != -1) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "401 * SQUIT " + splitBuff[1] + " :No such nick/channel\n"); + return ; + } + allFds.userData[pos].op = 1; + msg = "381 * " + allFds.userData[pos].nickname + " :You are now an IRC operator\n"; + send(allFds.userData[pos].fd, msg.c_str(), msg.size(), 0); } \ No newline at end of file diff --git a/srcs/commands/other/squit.cpp b/srcs/commands/operator/squit.cpp similarity index 55% rename from srcs/commands/other/squit.cpp rename to srcs/commands/operator/squit.cpp index 0687523..4a1e326 100644 --- a/srcs/commands/other/squit.cpp +++ b/srcs/commands/operator/squit.cpp @@ -6,24 +6,44 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:11:03 by apommier #+# #+# */ -/* Updated: 2023/02/12 14:23:39 by apommier ### ########.fr */ +/* Updated: 2023/02/15 15:10:43 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../../includes/ft_irc.hpp" +//ERR_NOPRIVILEGES ERR_NOSUCHSERVER + void SQUIT(std::string buffer, fdList &allFds, int userNbr) { (void)buffer; (void)allFds; (void)userNbr; - - if (allFds.userData[userNbr].op) - allFds.alive = 0; - else + + std::vector splitBuff; + split(buffer, ' ', splitBuff); + if (splitBuff.size() < 2) { - std::cout << "Not op but okay i'll do it\n"; - allFds.alive = 0; + cmd_error(allFds, allFds.userData[userNbr].fd, "431 * SQUIT :Not enought argument\n"); + return ; } + if (!allFds.userData[userNbr].op) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "481 * :Permission Denied- You're not an IRC operator\n"); + return ; + } + if (splitBuff[2] != "irc.local") + { + cmd_error(allFds, allFds.userData[userNbr].fd, "402 * " + splitBuff[2] + " :No such server\n"); + return ; + } + allFds.alive = 0; + // if (allFds.userData[userNbr].op) + // allFds.alive = 0; + // else + // { + // std::cout << "Not op but okay i'll do it\n"; + // allFds.alive = 0; + // } return ; } \ No newline at end of file diff --git a/srcs/commands/other/ping_pong.cpp b/srcs/commands/other/ping_pong.cpp index 555a0c6..eb8e993 100644 --- a/srcs/commands/other/ping_pong.cpp +++ b/srcs/commands/other/ping_pong.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/13 00:16:27 by apommier #+# #+# */ -/* Updated: 2023/02/13 22:54:14 by apommier ### ########.fr */ +/* Updated: 2023/02/14 14:27:53 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -51,14 +51,19 @@ void PING(std::string buffer, fdList &allFds, int userNbr) std::string msg; std::vector splitBuff; split(buffer, ' ', splitBuff); - msg = ":irc.local PONG irc.local :irc.local"; + msg = ":irc.local PONG irc.local :" + splitBuff[1] + "\n"; + //msg = "PONG irc.local " + splitBuff[1]; send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0); + std::cout << "pong send\n"; + std::cout << "/r = " << (int)'\r' << "\n"; + std::cout << "/n = " << (int)'\n' << "\n"; + std::cout << "msg=" << msg << "\n"; // 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/other/quit.cpp b/srcs/commands/other/quit.cpp index e2c4c9a..717d985 100644 --- a/srcs/commands/other/quit.cpp +++ b/srcs/commands/other/quit.cpp @@ -6,20 +6,49 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:10:26 by apommier #+# #+# */ -/* Updated: 2023/02/12 14:09:33 by apommier ### ########.fr */ +/* Updated: 2023/02/15 13:27:15 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../../includes/ft_irc.hpp" +void send_quit_msg(fdList &allFds, int userNbr, std::string msg) +{ + std::string fullMsg; + + // if (msg.empty()) + // fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " QUIT :" + joined_chan.name + "\n"; + // else + fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " QUIT :" + msg + "\n"; + for (size_t i = 0; i < allFds.userData[userNbr].joinedChan.size(); i++) + { + //allFds.userData[userNbr].joinedChan[i]-> + //send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0); + + for (size_t j = 0; j < allFds.userData[userNbr].joinedChan[i]->userList.size(); j++) + { + //std::cout << "send nickname " << allFds.userData[userNbr].joinedChan[i]->userList[j]->nickname << std::endl; + if (allFds.userData[userNbr].joinedChan[i]->userList[j] != &allFds.userData[userNbr]) + send(allFds.userData[userNbr].joinedChan[i]->userList[j]->fd, fullMsg.c_str(), fullMsg.size(), 0); + else + std::cout << "hehe je quitte\n"; + std::cout << "loop here\n"; + } + } +} + void QUIT(std::string buffer, fdList &allFds, int userNbr) { std::vector splitBuff; split(buffer, ' ', splitBuff); if (splitBuff.size() == 2) { + send_quit_msg(allFds, userNbr, splitBuff[2]); //print message? + //:kinou2!kinou@172.17.0.1 QUIT :Quit: leaving } + else + send_quit_msg(allFds, userNbr, allFds.userData[userNbr].nickname); delete_user(allFds, userNbr); return ; } \ No newline at end of file diff --git a/srcs/commands/parse_commands.cpp b/srcs/commands/parse_commands.cpp index e6dfbec..adf7eb2 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/13 19:44:43 by apommier ### ########.fr */ +/* Updated: 2023/02/14 01:16:34 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,7 +24,7 @@ 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; diff --git a/srcs/main.cpp b/srcs/main.cpp index cd5f6d5..9068700 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/12 22:35:11 by apommier ### ########.fr */ +/* Updated: 2023/02/14 03:00:42 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,21 +14,20 @@ int main(int ac, char **av) { - if (!(ac == 3 || ac == 2)) + if (!(ac == 3)) { //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 - // { - // initialize(av); - // } - // catch - // { - - // } - initialize(av); + try + { + initialize(av); + } + catch(std::exception &e) + { + std::cout << "Fatal error causing the end of the program :/\n"; + } return (0); } \ No newline at end of file diff --git a/srcs/server_loop.cpp b/srcs/server_loop.cpp index 35e278e..adb16b2 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/13 16:47:16 by apommier ### ########.fr */ +/* Updated: 2023/02/14 18:11:44 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,15 +23,19 @@ void start_loop(fdList &allFds) allFds.alive = 1; - std::cout << "serverFd: " << allFds.serverFd << std::endl; + //std::cout << "serverFd: " << allFds.serverFd << std::endl; while (allFds.alive) { - + //std::cout << "---------start loop-----------\n"; //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); + + eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 0); + + //eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 5000); + //std::cout << "eventNbr = " << eventNbr << std::endl; - //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++) { @@ -50,9 +54,9 @@ void start_loop(fdList &allFds) // if (!clientRequest(allFds, nbr)) // alive = false; clientRequest(allFds, nbr); - } } + //std::cout << "---------end loop-----------\n"; } std::cout << "dead server\n"; diff --git a/srcs/start_server.cpp b/srcs/start_server.cpp index 0c2a1d7..3ba032a 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/13 00:04:55 by apommier ### ########.fr */ +/* Updated: 2023/02/15 00:14:07 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,11 +26,12 @@ void initialize(char **av) int opt = 1; struct sockaddr_in addr; //int addrLen = sizeof(addr); - fdList allFds; + fdList allFds; //allFds.userData.reserve(MAX_EVENTS); //allFds.channelList.reserve(MAX_CHAN); - + allFds.password = av[2]; + std::cout << "pass= " << av[2] << std::endl; allFds.nbrUser = 0; allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0); if (allFds.serverFd == -1) @@ -59,7 +60,9 @@ void initialize(char **av) // { // nbrRead = read() // } - + time_t timer; + time(&timer); + allFds.creation_date = ctime(&timer); allFds.epollFd = epoll_start(); //allFds.userData epoll_add(allFds.epollFd, allFds.serverFd); diff --git a/srcs/utils.cpp b/srcs/utils.cpp index d3e2c67..363032a 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/13 10:52:07 by apommier ### ########.fr */ +/* Updated: 2023/02/14 14:27:33 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,7 +18,8 @@ void ft_error(std::string str) if (errno) { std::cerr << "errno: " << strerror(errno) << std::endl; - exit(errno); + throw ;//std::bad_alloc(); + //exit(errno); } exit(1); }