return of mode/ == dans les ternaires....
This commit is contained in:
parent
7f836520fc
commit
ed87aadb26
3
Makefile
3
Makefile
@ -6,7 +6,7 @@
|
||||
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# 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\
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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);
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -157,7 +157,7 @@ void join_loop(fdList &allFds, std::vector<std::string> 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";
|
||||
|
||||
@ -6,7 +6,78 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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<std::string> splitBuff, int userNbr)
|
||||
{
|
||||
std::vector<std::string> 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<std::string> 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);
|
||||
}
|
||||
@ -3,10 +3,10 @@
|
||||
/* ::: :::::::: */
|
||||
/* mode.cpp :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: sadjigui <sadjigui@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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<std::string> 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<std::string> 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<std::string> 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)?
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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)
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 ;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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);
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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<std::string> splitBuff, int userNbr)
|
||||
{
|
||||
std::vector<std::string> 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<std::string> 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 ;
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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);
|
||||
}
|
||||
//"<nick> :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 ;
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -89,3 +89,12 @@ int find_client_list(std::vector<clientData *> &list, clientData *client)
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
std::string int_to_str(int i)
|
||||
{
|
||||
std::string s;
|
||||
std::stringstream out;
|
||||
out << i;
|
||||
s = out.str();
|
||||
return (s);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user