diff --git a/Makefile b/Makefile index 9b09cf7..007936e 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/12/01 17:27:29 by apommier #+# #+# # -# Updated: 2023/03/09 00:20:47 by apommier ### ########.fr # +# Updated: 2023/03/13 02:21:45 by apommier ### ########.fr # # # # **************************************************************************** # @@ -34,6 +34,7 @@ SRCS := main.cpp\ commands/channel/privmsg.cpp\ commands/channel/notice.cpp\ commands/channel/part.cpp\ + commands/channel/list.cpp\ \ commands/other/quit.cpp\ commands/other/ping_pong.cpp\ diff --git a/includes/ft_irc.hpp b/includes/ft_irc.hpp index 0e63c67..08f0fb5 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/03/10 21:04:49 by apommier ### ########.fr */ +/* Updated: 2023/03/13 02:32:41 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -241,8 +241,10 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr); /* ******************************MODE UTILS********************************** */ /* ************************************************************************** */ -void ban_reply(channelData &chan, clientData &user); -void chan_reply(channelData &chan, clientData &user); -void user_reply(clientData &user); -int search_and_erase(std::string &str, std::string toFind); -bool str_to_int(int &i, const std::string s); +//bool str_to_int(int &i, const std::string s); +void ban_reply(channelData &chan, clientData &user); +void chan_reply(channelData &chan, clientData &user); +void user_reply(clientData &user); +int search_and_erase(std::string &str, std::string toFind); +bool str_to_int(int &i, const std::string s); +std::string int_to_str(int i); diff --git a/srcs/commands/channel/channel_utils.cpp b/srcs/commands/channel/channel_utils.cpp index 8ee07e3..b44d544 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/03/10 22:21:38 by apommier ### ########.fr */ +/* Updated: 2023/03/13 01:12:07 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -103,6 +103,9 @@ int find_user(fdList &allFds, std::string userName)//return direct user fd int is_in_same(fdList &allFds, int userNbr, int userNbr2) { size_t size; + + if (userNbr < 0 || userNbr2 < 0) + return (0); if (allFds.userData[userNbr].joinedChan.size() <= allFds.userData[userNbr2].joinedChan.size()) size = allFds.userData[userNbr].joinedChan.size(); else diff --git a/srcs/commands/channel/join.cpp b/srcs/commands/channel/join.cpp index 1851d7b..b9fcc2b 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/03/10 22:22:44 by apommier ### ########.fr */ +/* Updated: 2023/03/12 21:50:58 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -76,7 +76,7 @@ void join_or_create(std::string buffer, fdList &allFds, int userNbr) int invitedUser; channelData joined_chan; std::vector splitBuff; - + //std::cout << "JOINORCREATE\n"; split(buffer, ' ', splitBuff); chanNbr = find_channel(allFds, splitBuff[1]); @@ -157,7 +157,7 @@ void join_loop(fdList &allFds, std::vector splitBuff, int userNbr) if (splitChan[i][0] != '#' && splitChan[i][0] != '&') { //error bad channel name - buffer = "476 " + allFds.userData[userNbr].nickname + " JOIN " + splitChan[i] + " ::Bad Channel Mask\r\n"; + buffer = "476 " + allFds.userData[userNbr].nickname + " JOIN " + splitChan[i] + " :Bad Channel Mask\r\n"; cmd_error(allFds, allFds.userData[userNbr].fd, buffer); //:Bad Channel Mask //std::cout << "bad chan mask\n"; diff --git a/srcs/commands/channel/list.cpp b/srcs/commands/channel/list.cpp index dea4e3c..13922c1 100644 --- a/srcs/commands/channel/list.cpp +++ b/srcs/commands/channel/list.cpp @@ -6,7 +6,78 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/18 00:50:51 by apommier #+# #+# */ -/* Updated: 2023/02/18 00:50:52 by apommier ### ########.fr */ +/* Updated: 2023/03/13 02:39:00 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ +#include "../../../includes/ft_irc.hpp" + +// msg = "321 " + allFds.userData[userNbr].nickname + " " + allfds.channelList[i].name; +// msg = "322 " + allFds.userData[userNbr].nickname + " :End of LIST\r\n"; +// msg = "323 " + allFds.userData[userNbr].nickname + " :End of LIST\r\n"; //done + +void list_reply(fdList &allFds, channelData &chan, int fd, int userNbr) +{ + //:irc.server.com 321 MonPseudo :Channel :Users Name //start + //:irc.server.com 322 MonPseudo #channel 10 :Channel Topic //list + //:irc.server.com 323 MonPseudo :End of LIST //end + + std::string msg; + // msg = "321 " + allFds.userData[userNbr].nickname + ":ChannelName UserNbr :Topic\r\n"; + // cmd_reply(allFds, fd, msg); + //str_to_int(int &i, const std::string s); + msg = "322 " + allFds.userData[userNbr].nickname + " :" + chan.name + " " + int_to_str(chan.userList.size()) + " :" + chan.topic + "\r\n";//"ChannelName UserNbr :Topic\r\n"; + cmd_reply(allFds, fd, msg); + + // msg = "323 " + allFds.userData[userNbr].nickname + " :End of LIST\r\n"; + // cmd_reply(allFds, fd, msg); +} + +void list_loop(fdList &allFds, std::vector splitBuff, int userNbr) +{ + std::vector splitChan; + int pos; + + split(splitBuff[1], ',', splitChan); + for (size_t i = 0; i < splitChan.size(); i++) + { + pos = find_channel(allFds, splitChan[i]); + if (pos != -1) + { + if ((!allFds.channelList[pos].mode.p && !allFds.channelList[pos].mode.s) + || is_joined(allFds, allFds.channelList[pos].name, userNbr) || allFds.userData[userNbr].op) + list_reply(allFds, allFds.channelList[pos], allFds.userData[userNbr].fd, userNbr); + } + } +} + +void LIST(std::string buffer, fdList &allFds, int userNbr) +{ + std::vector splitBuff; + std::string msg; + + if (!allFds.userData[userNbr].registered) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "451 " + allFds.userData[userNbr].nickname + " LIST :You have not registered\r\n"); + return ; + } + split(buffer, ' ', splitBuff); + msg = "321 " + allFds.userData[userNbr].nickname + " :ChannelName UserNbr :Topic\r\n"; + cmd_reply(allFds, allFds.userData[userNbr].fd, msg); + if (splitBuff.size() == 1 || splitBuff[1] == "0") + { + //rpl start + for (size_t i = 0; i < allFds.channelList.size(); i++) + { + if ((!allFds.channelList[i].mode.p && !allFds.channelList[i].mode.s) + || is_joined(allFds, allFds.channelList[i].name, userNbr) || allFds.userData[userNbr].op) + list_reply(allFds, allFds.channelList[i], allFds.userData[userNbr].fd, userNbr); + } + //rpl end + return ; + } + else + list_loop(allFds, splitBuff, userNbr); + msg = "323 " + allFds.userData[userNbr].nickname + " :End of LIST\r\n"; + cmd_reply(allFds, allFds.userData[userNbr].fd, msg); +} \ No newline at end of file diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index 17526f4..948165c 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/03/10 21:50:12 by sadjigui ### ########.fr */ +/* Updated: 2023/03/13 06:47:29 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -146,17 +146,17 @@ void do_chan_opt(fdList &allFds, int userNbr, std::vector opt, int { case 'o': chan_opt_o(allFds, userNbr, opt, chanNbr, sign); //std::cout << "launching option: " << opt[2][i] << std::endl; break ; - case 'p': allFds.channelList[chanNbr].mode.p = (sign = true) ? true : false; + case 'p': allFds.channelList[chanNbr].mode.p = (sign == true) ? true : false; break ; - case 's': allFds.channelList[chanNbr].mode.s = (sign = true) ? true : false; + case 's': allFds.channelList[chanNbr].mode.s = (sign == true) ? true : false; break ; - case 'i': allFds.channelList[chanNbr].mode.i = (sign = true) ? true : false; + case 'i': allFds.channelList[chanNbr].mode.i = (sign == true) ? true : false; break ; - case 't': allFds.channelList[chanNbr].mode.t = (sign = true) ? true : false; + case 't': allFds.channelList[chanNbr].mode.t = (sign == true) ? true : false; break ; - case 'n': allFds.channelList[chanNbr].mode.n = (sign = true) ? true : false; + case 'n': allFds.channelList[chanNbr].mode.n = (sign == true) ? true : false; break ; - case 'm': allFds.channelList[chanNbr].mode.m = (sign = true) ? true : false; + case 'm': allFds.channelList[chanNbr].mode.m = (sign == true) ? true : false; break ; case 'l': if (sign == true) @@ -193,31 +193,35 @@ void do_user_opt(fdList &allFds, int userNbr, std::vector opt, int return ; } if (opt[2][0] == '-') + { + std::cout << "sign = false\n"; sign = false; + } for (int i = 1; opt[2][i]; i++) { switch(opt[2][i]) { - case 'i': allFds.userData[new_target].mode.i = (sign = true) ? true : false; + case 'i': allFds.userData[new_target].mode.i = (sign == true) ? true : false; break ; - case 's': allFds.userData[new_target].mode.s = (sign = true) ? true : false; + case 's': allFds.userData[new_target].mode.s = (sign == true) ? true : false; break ; - case 'w': allFds.userData[new_target].mode.w = (sign = true) ? true : false; + case 'w': allFds.userData[new_target].mode.w = (sign == true) ? true : false; break ; case 'o': if (sign == true) return ; - if (allFds.userData[userNbr].mode.o == false) - { - cmd_error(allFds, allFds.userData[userNbr].fd, "482 *" + opt[1] + " :You're not channel operator\n"); - return ; - } - allFds.userData[new_target].mode.o = (sign = true) ? true : false; + // if (allFds.userData[userNbr].mode.o == false) + // { + // cmd_error(allFds, allFds.userData[userNbr].fd, "482 *" + opt[1] + " :You're not channel operator\n"); + // return ; + // } + allFds.userData[new_target].mode.o = (sign == true) ? true : false; break ; default: std::cout << "Default" << std::endl; break ; } } + std::cout << "mode w== " << allFds.userData[new_target].mode.w << std::endl; return; } @@ -227,7 +231,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) std::vector splitBuff; int pos; split(buffer, ' ', splitBuff); - if (splitBuff.size() < 3) + if (splitBuff.size() < 2) { cmd_error(allFds, allFds.userData[userNbr].fd, "461 *" + splitBuff[0] + " :Not enough parameters\n"); return ; @@ -243,15 +247,17 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) //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; - if ((splitBuff[2].size() < 2) || (splitBuff[2][0] != '-' && splitBuff[2][0] != '+')) + if (splitBuff.size() > 2) { - std::cout << "Bad params" << std::endl; - return ; + search_and_erase(splitBuff[2], "opsitnmlbvk"); + // std::cout << "splitbuff[2] after = " << splitBuff[2] << std::endl; + if ((splitBuff[2].size() < 2) || (splitBuff[2][0] != '-' && splitBuff[2][0] != '+')) + { + std::cout << "Bad params" << std::endl; + return ; + } + do_chan_opt(allFds, userNbr, splitBuff, pos); } - do_chan_opt(allFds, userNbr, splitBuff, pos); chan_reply(allFds.channelList[pos], allFds.userData[userNbr]); //do_option one by one here (do_chan_opt)? return ; @@ -260,18 +266,21 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) else if ((pos = find_user(allFds, splitBuff[1])) == -1) { std::cout << "user doesn't exist" << std::endl; - cmd_error(allFds, allFds.userData[userNbr].fd, "401 *" + splitBuff[1] + " :No such nick/channel\n"); + cmd_error(allFds, allFds.userData[userNbr].fd, "401 *" + splitBuff[1] + " :No such nick\n"); return ; } else { - search_and_erase(splitBuff[2], "iswo"); - if ((splitBuff[2].size() < 2) && (splitBuff[2][0] != '-' || splitBuff[2][0] != '+')) + if (splitBuff.size() > 2) { - cmd_error(allFds, allFds.userData[userNbr].fd, "461 *" + splitBuff[0] + " :Not enough parameters\n"); - return ; + search_and_erase(splitBuff[2], "iswo"); + if ((splitBuff[2].size() < 2) && (splitBuff[2][0] != '-' || splitBuff[2][0] != '+')) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "461 *" + splitBuff[0] + " :Not enough parameters\n"); + return ; + } + do_user_opt(allFds, userNbr, splitBuff, pos); } - do_user_opt(allFds, userNbr, splitBuff, pos); user_reply(allFds.userData[userNbr]); } //do_option one by one here (do_user_opt)? diff --git a/srcs/commands/channel_op/utils_mode.cpp b/srcs/commands/channel_op/utils_mode.cpp index ec23ad3..8d956e4 100644 --- a/srcs/commands/channel_op/utils_mode.cpp +++ b/srcs/commands/channel_op/utils_mode.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/03/09 00:13:32 by apommier #+# #+# */ -/* Updated: 2023/03/10 22:03:03 by apommier ### ########.fr */ +/* Updated: 2023/03/13 06:21:17 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -60,13 +60,23 @@ void chan_reply(channelData &chan, clientData &user) //return (reply); } +void user_mode_reply(fdList &allFds, clientData &user, int userNbr, std::string mode) +{ + //userNbr = asking client + //client = changed mode client + std::string reply = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + + "@" + allFds.userData[userNbr].ip + " MODE " + user.nickname + " :+" + mode; + //void user_reply(clientData &user) +} + void user_reply(clientData &user) { //:irc.server.com 221 ClientName +ix //std::string reply; - std::string reply = " +"; - std::string reply_begin = ":irc.local 221 " + user.nickname + " +"; + //std::string reply = " +"; + //:kinou1!kinou@127.0.0.1 MODE kinou1 :+i + std::string reply = ":irc.local 221 " + user.nickname + " +"; if (user.mode.i) reply += 'i'; if (user.mode.s) @@ -76,7 +86,9 @@ void user_reply(clientData &user) if (user.mode.o) reply += 'o'; reply += "\r\n"; + std::cout << reply; send(user.fd, reply.c_str(), reply.size(), 0); + //cmd_reply(allFds, user.fd, reply); } int search_and_erase(std::string &str, std::string toFind) diff --git a/srcs/commands/not_done_cmd.cpp b/srcs/commands/not_done_cmd.cpp index 0466b4d..35efb1b 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/19 22:11:59 by apommier ### ########.fr */ +/* Updated: 2023/03/13 02:33:34 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -33,13 +33,13 @@ void SERVER(std::string buffer, fdList &allFds, int userNbr) -void LIST(std::string buffer, fdList &allFds, int userNbr) -{ - (void)buffer; - (void)allFds; - (void)userNbr; - return ; -} +// void LIST(std::string buffer, fdList &allFds, int userNbr) +// { +// (void)buffer; +// (void)allFds; +// (void)userNbr; +// return ; +// } diff --git a/srcs/commands/operator/oper.cpp b/srcs/commands/operator/oper.cpp index 15d5205..5dab1b7 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/03/10 22:14:14 by apommier ### ########.fr */ +/* Updated: 2023/03/13 06:06:11 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -46,7 +46,7 @@ void OPER(std::string buffer, fdList &allFds, int userNbr) // return ; // } allFds.userData[userNbr].op = 1; - allFds.userData[userNbr].mode.s = 1; + allFds.userData[userNbr].mode.o = 1; msg = "381 " + allFds.userData[userNbr].nickname + " " + allFds.userData[userNbr].nickname + " :You are now an IRC operator\r\n"; send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0); } \ No newline at end of file diff --git a/srcs/commands/other/names.cpp b/srcs/commands/other/names.cpp index 526ef8d..697a336 100644 --- a/srcs/commands/other/names.cpp +++ b/srcs/commands/other/names.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/16 18:14:15 by apommier #+# #+# */ -/* Updated: 2023/03/10 22:26:02 by apommier ### ########.fr */ +/* Updated: 2023/03/13 06:12:36 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,31 +15,63 @@ //:irc.server.net 353 user = #channel :@user1 +user2 user3 //:irc.server.net 366 user #channel :End of /NAMES list. -void names_reply(fdList &allFds, channelData &chan, int fd, std::string user) +void names_reply(fdList &allFds, channelData &chan, int fd, int userNbr) { + //:irc.local 353 kinou3 = #test :@kinou3 std::string msg; - msg = "353 " + user + " = " + chan.name + " :"; + msg = "353 " + allFds.userData[userNbr].nickname + " = " + chan.name + " :"; for (size_t i = 0; i < chan.userList.size(); i++) { - if (chan.userList[i]->mode.o)//ischanop - msg += "=" + chan.userList[i]->nickname + " "; - else if (chan.userList[i]->mode.o)//verbose + if (chan.userList[i]->mode.i && !is_in_same(allFds, userNbr, find_user(allFds, chan.userList[i]->nickname) && !allFds.userData[userNbr].op)/*user secret et pas meme chan*/) + ; + else if (find_client_list(chan.opList, chan.userList[i]) || allFds.userData[userNbr].op)//(chan.userList[i]->mode.o)//ischanop msg += "@" + chan.userList[i]->nickname + " "; + else if (find_client_list(chan.verboseList, chan.userList[i]))//(chan.userList[i]->mode.v)//verbose + msg += "=" + chan.userList[i]->nickname + " "; else msg += "+" + chan.userList[i]->nickname + " "; } msg += "\r\n"; std::cout << "name msg= " << msg; cmd_reply(allFds, fd, msg); + msg = "366 " + allFds.userData[userNbr].nickname + " " + chan.name + " :End of /NAMES list\r\n"; + cmd_reply(allFds, fd, msg); +} + +void names_loop(fdList &allFds, std::vector splitBuff, int userNbr) +{ + std::vector splitChan; + int pos; + + split(splitBuff[1], ',', splitChan); + for (size_t i = 0; i < splitChan.size(); i++) + { + //if (splitChan[i][0] != '#' && splitChan[i][0] != '&') + //{ + // buffer = "476 " + allFds.userData[userNbr].nickname + " NAMES " + splitChan[i] + " :Bad Channel Mask\r\n"; + // cmd_error(allFds, allFds.userData[userNbr].fd, buffer); + // return ; + //} + pos = find_channel(allFds, splitChan[i]); + // if ((!allFds.channelList[i].mode.p && !allFds.channelList[i].mode.s) + // || is_joined(allFds, allFds.channelList[i].name, userNbr)) + if (pos != -1) + { + if ((!allFds.channelList[pos].mode.p && !allFds.channelList[pos].mode.s) + || is_joined(allFds, allFds.channelList[pos].name, userNbr) || allFds.userData[userNbr].op) + names_reply(allFds, allFds.channelList[pos], allFds.userData[userNbr].fd, userNbr); + return; + } + } + + + } void NAMES(std::string buffer, fdList &allFds, int userNbr) { - (void)buffer; - (void)allFds; - (void)userNbr; std::vector splitBuff; - int pos; + //int pos; if (!allFds.userData[userNbr].registered) { @@ -52,22 +84,25 @@ void NAMES(std::string buffer, fdList &allFds, int userNbr) for (size_t i = 0; i < allFds.channelList.size(); i++) { if ((!allFds.channelList[i].mode.p && !allFds.channelList[i].mode.s) - || is_joined(allFds, allFds.channelList[i].name, userNbr)) + || is_joined(allFds, allFds.channelList[i].name, userNbr) || allFds.userData[userNbr].op) { - names_reply(allFds, allFds.channelList[i], allFds.userData[userNbr].fd, allFds.userData[userNbr].nickname); + names_reply(allFds, allFds.channelList[i], allFds.userData[userNbr].fd, userNbr); //print who } } return ; } - if ((pos = find_channel(allFds, splitBuff[1])) != -1) - { - if ((!allFds.channelList[pos].mode.p && !allFds.channelList[pos].mode.s) - || is_joined(allFds, allFds.channelList[pos].name, userNbr)) - { - names_reply(allFds, allFds.channelList[pos], allFds.userData[userNbr].fd, allFds.userData[userNbr].nickname); - } - return; //?? - } + else + names_loop(allFds, splitBuff, userNbr); + + // if ((pos = find_channel(allFds, splitBuff[1])) != -1) + // { + // if ((!allFds.channelList[pos].mode.p && !allFds.channelList[pos].mode.s) + // || is_joined(allFds, allFds.channelList[pos].name, userNbr)) + // { + // names_reply(allFds, allFds.channelList[pos], allFds.userData[userNbr].fd, allFds.userData[userNbr].nickname); + // } + // return; //?? + // } return ; } diff --git a/srcs/commands/other/who.cpp b/srcs/commands/other/who.cpp index b42a79e..7adc431 100644 --- a/srcs/commands/other/who.cpp +++ b/srcs/commands/other/who.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/16 18:14:17 by apommier #+# #+# */ -/* Updated: 2023/03/10 22:26:41 by apommier ### ########.fr */ +/* Updated: 2023/03/13 04:57:33 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -55,7 +55,7 @@ void WHO(std::string buffer, fdList &allFds, int userNbr) { for (int i = 0; i < allFds.nbrUser; i++) { - if (!allFds.userData[i].mode.i || is_in_same(allFds, userNbr, i)) + if (!allFds.userData[i].mode.i || is_in_same(allFds, userNbr, i) || allFds.userData[userNbr].op) { who_reply(allFds, allFds.userData[i], allFds.userData[userNbr].fd); //print who @@ -73,7 +73,7 @@ void WHO(std::string buffer, fdList &allFds, int userNbr) who_reply(allFds, *allFds.channelList[pos].userList[i], allFds.userData[userNbr].fd); } //" :End of WHOIS list" - cmd_reply(allFds, allFds.userData[userNbr].fd, allFds.userData[userNbr].nickname + " :End of WHOIS list\n"); + cmd_reply(allFds, allFds.userData[userNbr].fd, allFds.userData[userNbr].nickname + " :End of WHO list\n"); //std::cout << return ; } \ No newline at end of file diff --git a/srcs/new_connection.cpp b/srcs/new_connection.cpp index d36436e..26fb5f4 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/03/09 04:59:05 by apommier ### ########.fr */ +/* Updated: 2023/03/11 20:36:50 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -31,6 +31,10 @@ void new_connection(fdList &allFds) //int newUserFd; //allFds.userFdList.push_back(newUserFd); newFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen); + //protect accept + + + //allFds.userFdList[allFds.nbrUser] = newFd; allFds.userFdList.push_back(newFd); //std::cout << "newConnection | old user fd = " << newFd << std::endl; diff --git a/srcs/utils.cpp b/srcs/utils.cpp index 3b130ec..bdd7ab0 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/03/10 22:14:58 by apommier ### ########.fr */ +/* Updated: 2023/03/13 02:33:08 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -88,4 +88,13 @@ int find_client_list(std::vector &list, clientData *client) return (i); } return (-1); +} + +std::string int_to_str(int i) +{ + std::string s; + std::stringstream out; + out << i; + s = out.str(); + return (s); } \ No newline at end of file