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> +#+ +:+ +#+ #
|
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2022/12/01 17:27:29 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/privmsg.cpp\
|
||||||
commands/channel/notice.cpp\
|
commands/channel/notice.cpp\
|
||||||
commands/channel/part.cpp\
|
commands/channel/part.cpp\
|
||||||
|
commands/channel/list.cpp\
|
||||||
\
|
\
|
||||||
commands/other/quit.cpp\
|
commands/other/quit.cpp\
|
||||||
commands/other/ping_pong.cpp\
|
commands/other/ping_pong.cpp\
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/12/01 17:27:37 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********************************** */
|
/* ******************************MODE UTILS********************************** */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
void ban_reply(channelData &chan, clientData &user);
|
//bool str_to_int(int &i, const std::string s);
|
||||||
void chan_reply(channelData &chan, clientData &user);
|
void ban_reply(channelData &chan, clientData &user);
|
||||||
void user_reply(clientData &user);
|
void chan_reply(channelData &chan, clientData &user);
|
||||||
int search_and_erase(std::string &str, std::string toFind);
|
void user_reply(clientData &user);
|
||||||
bool str_to_int(int &i, const std::string s);
|
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> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/09 17:21:57 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)
|
int is_in_same(fdList &allFds, int userNbr, int userNbr2)
|
||||||
{
|
{
|
||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
|
if (userNbr < 0 || userNbr2 < 0)
|
||||||
|
return (0);
|
||||||
if (allFds.userData[userNbr].joinedChan.size() <= allFds.userData[userNbr2].joinedChan.size())
|
if (allFds.userData[userNbr].joinedChan.size() <= allFds.userData[userNbr2].joinedChan.size())
|
||||||
size = allFds.userData[userNbr].joinedChan.size();
|
size = allFds.userData[userNbr].joinedChan.size();
|
||||||
else
|
else
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/09 15:40:33 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;
|
int invitedUser;
|
||||||
channelData joined_chan;
|
channelData joined_chan;
|
||||||
std::vector<std::string> splitBuff;
|
std::vector<std::string> splitBuff;
|
||||||
|
|
||||||
//std::cout << "JOINORCREATE\n";
|
//std::cout << "JOINORCREATE\n";
|
||||||
split(buffer, ' ', splitBuff);
|
split(buffer, ' ', splitBuff);
|
||||||
chanNbr = find_channel(allFds, splitBuff[1]);
|
chanNbr = find_channel(allFds, splitBuff[1]);
|
||||||
@ -157,7 +157,7 @@ void join_loop(fdList &allFds, std::vector<std::string> splitBuff, int userNbr)
|
|||||||
if (splitChan[i][0] != '#' && splitChan[i][0] != '&')
|
if (splitChan[i][0] != '#' && splitChan[i][0] != '&')
|
||||||
{
|
{
|
||||||
//error bad channel name
|
//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);
|
cmd_error(allFds, allFds.userData[userNbr].fd, buffer);
|
||||||
//:Bad Channel Mask
|
//:Bad Channel Mask
|
||||||
//std::cout << "bad chan mask\n";
|
//std::cout << "bad chan mask\n";
|
||||||
|
|||||||
@ -6,7 +6,78 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/18 00:50:51 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<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 :+: :+: :+: */
|
/* mode.cpp :+: :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: sadjigui <sadjigui@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/11 19:19:30 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<std::string> opt, int
|
|||||||
{
|
{
|
||||||
case 'o': chan_opt_o(allFds, userNbr, opt, chanNbr, sign); //std::cout << "launching option: " << opt[2][i] << std::endl;
|
case 'o': chan_opt_o(allFds, userNbr, opt, chanNbr, sign); //std::cout << "launching option: " << opt[2][i] << std::endl;
|
||||||
break ;
|
break ;
|
||||||
case 'p': allFds.channelList[chanNbr].mode.p = (sign = true) ? true : false;
|
case 'p': allFds.channelList[chanNbr].mode.p = (sign == true) ? true : false;
|
||||||
break ;
|
break ;
|
||||||
case 's': allFds.channelList[chanNbr].mode.s = (sign = true) ? true : false;
|
case 's': allFds.channelList[chanNbr].mode.s = (sign == true) ? true : false;
|
||||||
break ;
|
break ;
|
||||||
case 'i': allFds.channelList[chanNbr].mode.i = (sign = true) ? true : false;
|
case 'i': allFds.channelList[chanNbr].mode.i = (sign == true) ? true : false;
|
||||||
break ;
|
break ;
|
||||||
case 't': allFds.channelList[chanNbr].mode.t = (sign = true) ? true : false;
|
case 't': allFds.channelList[chanNbr].mode.t = (sign == true) ? true : false;
|
||||||
break ;
|
break ;
|
||||||
case 'n': allFds.channelList[chanNbr].mode.n = (sign = true) ? true : false;
|
case 'n': allFds.channelList[chanNbr].mode.n = (sign == true) ? true : false;
|
||||||
break ;
|
break ;
|
||||||
case 'm': allFds.channelList[chanNbr].mode.m = (sign = true) ? true : false;
|
case 'm': allFds.channelList[chanNbr].mode.m = (sign == true) ? true : false;
|
||||||
break ;
|
break ;
|
||||||
case 'l':
|
case 'l':
|
||||||
if (sign == true)
|
if (sign == true)
|
||||||
@ -193,31 +193,35 @@ void do_user_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int
|
|||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
if (opt[2][0] == '-')
|
if (opt[2][0] == '-')
|
||||||
|
{
|
||||||
|
std::cout << "sign = false\n";
|
||||||
sign = false;
|
sign = false;
|
||||||
|
}
|
||||||
for (int i = 1; opt[2][i]; i++)
|
for (int i = 1; opt[2][i]; i++)
|
||||||
{
|
{
|
||||||
switch(opt[2][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 ;
|
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 ;
|
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 ;
|
break ;
|
||||||
case 'o':
|
case 'o':
|
||||||
if (sign == true)
|
if (sign == true)
|
||||||
return ;
|
return ;
|
||||||
if (allFds.userData[userNbr].mode.o == false)
|
// if (allFds.userData[userNbr].mode.o == false)
|
||||||
{
|
// {
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "482 *" + opt[1] + " :You're not channel operator\n");
|
// cmd_error(allFds, allFds.userData[userNbr].fd, "482 *" + opt[1] + " :You're not channel operator\n");
|
||||||
return ;
|
// return ;
|
||||||
}
|
// }
|
||||||
allFds.userData[new_target].mode.o = (sign = true) ? true : false;
|
allFds.userData[new_target].mode.o = (sign == true) ? true : false;
|
||||||
break ;
|
break ;
|
||||||
default: std::cout << "Default" << std::endl;
|
default: std::cout << "Default" << std::endl;
|
||||||
break ;
|
break ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
std::cout << "mode w== " << allFds.userData[new_target].mode.w << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,7 +231,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
std::vector<std::string> splitBuff;
|
std::vector<std::string> splitBuff;
|
||||||
int pos;
|
int pos;
|
||||||
split(buffer, ' ', splitBuff);
|
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");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "461 *" + splitBuff[0] + " :Not enough parameters\n");
|
||||||
return ;
|
return ;
|
||||||
@ -243,15 +247,17 @@ void MODE(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
//verify_option(allFds, str, i); //needed?
|
//verify_option(allFds, str, i); //needed?
|
||||||
|
|
||||||
// std::cout << "splitbuff[2] = " << splitBuff[2] << std::endl;
|
// std::cout << "splitbuff[2] = " << splitBuff[2] << std::endl;
|
||||||
|
if (splitBuff.size() > 2)
|
||||||
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;
|
search_and_erase(splitBuff[2], "opsitnmlbvk");
|
||||||
return ;
|
// 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]);
|
chan_reply(allFds.channelList[pos], allFds.userData[userNbr]);
|
||||||
//do_option one by one here (do_chan_opt)?
|
//do_option one by one here (do_chan_opt)?
|
||||||
return ;
|
return ;
|
||||||
@ -260,18 +266,21 @@ void MODE(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
else if ((pos = find_user(allFds, splitBuff[1])) == -1)
|
else if ((pos = find_user(allFds, splitBuff[1])) == -1)
|
||||||
{
|
{
|
||||||
std::cout << "user doesn't exist" << std::endl;
|
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 ;
|
return ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
search_and_erase(splitBuff[2], "iswo");
|
if (splitBuff.size() > 2)
|
||||||
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");
|
search_and_erase(splitBuff[2], "iswo");
|
||||||
return ;
|
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]);
|
user_reply(allFds.userData[userNbr]);
|
||||||
}
|
}
|
||||||
//do_option one by one here (do_user_opt)?
|
//do_option one by one here (do_user_opt)?
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/03/09 00:13:32 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);
|
//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)
|
void user_reply(clientData &user)
|
||||||
{
|
{
|
||||||
//:irc.server.com 221 ClientName +ix
|
//:irc.server.com 221 ClientName +ix
|
||||||
|
|
||||||
//std::string reply;
|
//std::string reply;
|
||||||
std::string reply = " +";
|
//std::string reply = " +";
|
||||||
std::string reply_begin = ":irc.local 221 " + user.nickname + " +";
|
//:kinou1!kinou@127.0.0.1 MODE kinou1 :+i
|
||||||
|
std::string reply = ":irc.local 221 " + user.nickname + " +";
|
||||||
if (user.mode.i)
|
if (user.mode.i)
|
||||||
reply += 'i';
|
reply += 'i';
|
||||||
if (user.mode.s)
|
if (user.mode.s)
|
||||||
@ -76,7 +86,9 @@ void user_reply(clientData &user)
|
|||||||
if (user.mode.o)
|
if (user.mode.o)
|
||||||
reply += 'o';
|
reply += 'o';
|
||||||
reply += "\r\n";
|
reply += "\r\n";
|
||||||
|
std::cout << reply;
|
||||||
send(user.fd, reply.c_str(), reply.size(), 0);
|
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)
|
int search_and_erase(std::string &str, std::string toFind)
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/09 22:04:11 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 LIST(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
// {
|
||||||
(void)buffer;
|
// (void)buffer;
|
||||||
(void)allFds;
|
// (void)allFds;
|
||||||
(void)userNbr;
|
// (void)userNbr;
|
||||||
return ;
|
// return ;
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/11 19:04:47 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 ;
|
// return ;
|
||||||
// }
|
// }
|
||||||
allFds.userData[userNbr].op = 1;
|
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";
|
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);
|
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
|
||||||
}
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/16 18:14:15 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 353 user = #channel :@user1 +user2 user3
|
||||||
//:irc.server.net 366 user #channel :End of /NAMES list.
|
//: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;
|
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++)
|
for (size_t i = 0; i < chan.userList.size(); i++)
|
||||||
{
|
{
|
||||||
if (chan.userList[i]->mode.o)//ischanop
|
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*/)
|
||||||
msg += "=" + chan.userList[i]->nickname + " ";
|
;
|
||||||
else if (chan.userList[i]->mode.o)//verbose
|
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 + " ";
|
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
|
else
|
||||||
msg += "+" + chan.userList[i]->nickname + " ";
|
msg += "+" + chan.userList[i]->nickname + " ";
|
||||||
}
|
}
|
||||||
msg += "\r\n";
|
msg += "\r\n";
|
||||||
std::cout << "name msg= " << msg;
|
std::cout << "name msg= " << msg;
|
||||||
cmd_reply(allFds, fd, 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 NAMES(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
(void)buffer;
|
|
||||||
(void)allFds;
|
|
||||||
(void)userNbr;
|
|
||||||
std::vector<std::string> splitBuff;
|
std::vector<std::string> splitBuff;
|
||||||
int pos;
|
//int pos;
|
||||||
|
|
||||||
if (!allFds.userData[userNbr].registered)
|
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++)
|
for (size_t i = 0; i < allFds.channelList.size(); i++)
|
||||||
{
|
{
|
||||||
if ((!allFds.channelList[i].mode.p && !allFds.channelList[i].mode.s)
|
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
|
//print who
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
if ((pos = find_channel(allFds, splitBuff[1])) != -1)
|
else
|
||||||
{
|
names_loop(allFds, splitBuff, userNbr);
|
||||||
if ((!allFds.channelList[pos].mode.p && !allFds.channelList[pos].mode.s)
|
|
||||||
|| is_joined(allFds, allFds.channelList[pos].name, userNbr))
|
// if ((pos = find_channel(allFds, splitBuff[1])) != -1)
|
||||||
{
|
// {
|
||||||
names_reply(allFds, allFds.channelList[pos], allFds.userData[userNbr].fd, allFds.userData[userNbr].nickname);
|
// if ((!allFds.channelList[pos].mode.p && !allFds.channelList[pos].mode.s)
|
||||||
}
|
// || is_joined(allFds, allFds.channelList[pos].name, userNbr))
|
||||||
return; //??
|
// {
|
||||||
}
|
// names_reply(allFds, allFds.channelList[pos], allFds.userData[userNbr].fd, allFds.userData[userNbr].nickname);
|
||||||
|
// }
|
||||||
|
// return; //??
|
||||||
|
// }
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/16 18:14:17 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++)
|
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);
|
who_reply(allFds, allFds.userData[i], allFds.userData[userNbr].fd);
|
||||||
//print who
|
//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);
|
who_reply(allFds, *allFds.channelList[pos].userList[i], allFds.userData[userNbr].fd);
|
||||||
}
|
}
|
||||||
//"<nick> :End of WHOIS list"
|
//"<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 <<
|
//std::cout <<
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/12/09 22:26:27 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;
|
//int newUserFd;
|
||||||
//allFds.userFdList.push_back(newUserFd);
|
//allFds.userFdList.push_back(newUserFd);
|
||||||
newFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
|
newFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
|
||||||
|
//protect accept
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//allFds.userFdList[allFds.nbrUser] = newFd;
|
//allFds.userFdList[allFds.nbrUser] = newFd;
|
||||||
allFds.userFdList.push_back(newFd);
|
allFds.userFdList.push_back(newFd);
|
||||||
//std::cout << "newConnection | old user fd = " << newFd << std::endl;
|
//std::cout << "newConnection | old user fd = " << newFd << std::endl;
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/12/06 21:46:41 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<clientData *> &list, clientData *client)
|
|||||||
return (i);
|
return (i);
|
||||||
}
|
}
|
||||||
return (-1);
|
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