Merge branch 'apommier' into sadjigui
This commit is contained in:
commit
cb29e8c121
6
Makefile
6
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/02/15 17:14:51 by apommier ### ########.fr #
|
# Updated: 2023/02/19 22:11:26 by apommier ### ########.fr #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
@ -33,9 +33,12 @@ SRCS := main.cpp\
|
|||||||
commands/channel/join.cpp\
|
commands/channel/join.cpp\
|
||||||
commands/channel/privmsg.cpp\
|
commands/channel/privmsg.cpp\
|
||||||
commands/channel/notice.cpp\
|
commands/channel/notice.cpp\
|
||||||
|
commands/channel/part.cpp\
|
||||||
\
|
\
|
||||||
commands/other/quit.cpp\
|
commands/other/quit.cpp\
|
||||||
commands/other/ping_pong.cpp\
|
commands/other/ping_pong.cpp\
|
||||||
|
commands/other/who.cpp\
|
||||||
|
commands/other/names.cpp\
|
||||||
\
|
\
|
||||||
commands/channel_op/invite.cpp\
|
commands/channel_op/invite.cpp\
|
||||||
commands/channel_op/kick.cpp\
|
commands/channel_op/kick.cpp\
|
||||||
@ -45,6 +48,7 @@ SRCS := main.cpp\
|
|||||||
commands/operator/squit.cpp\
|
commands/operator/squit.cpp\
|
||||||
commands/operator/oper.cpp\
|
commands/operator/oper.cpp\
|
||||||
commands/operator/kill.cpp\
|
commands/operator/kill.cpp\
|
||||||
|
commands/operator/wallops.cpp\
|
||||||
\
|
\
|
||||||
commands/not_done_cmd.cpp #special (temporary)
|
commands/not_done_cmd.cpp #special (temporary)
|
||||||
|
|
||||||
|
|||||||
@ -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/02/15 19:54:47 by apommier ### ########.fr */
|
/* Updated: 2023/02/22 13:40:08 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -132,6 +132,8 @@ struct channelData //each chan have one
|
|||||||
|
|
||||||
std::vector<clientData *> userList;
|
std::vector<clientData *> userList;
|
||||||
std::vector<clientData *> banList;
|
std::vector<clientData *> banList;
|
||||||
|
//std::vector<clientData *> invitedList;
|
||||||
|
//std::vector<clientData *> verboseList;
|
||||||
std::vector<clientData *> opList;
|
std::vector<clientData *> opList;
|
||||||
|
|
||||||
chanMode mode;
|
chanMode mode;
|
||||||
@ -147,7 +149,7 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY
|
|||||||
struct epoll_event events[MAX_EVENTS];
|
struct epoll_event events[MAX_EVENTS];
|
||||||
int epollFd;
|
int epollFd;
|
||||||
int serverFd;
|
int serverFd;
|
||||||
std::vector<int> userList;
|
std::vector<int> userFdList;
|
||||||
|
|
||||||
accessList<channelData> channelList;
|
accessList<channelData> channelList;
|
||||||
accessList<clientData> userData;
|
accessList<clientData> userData;
|
||||||
@ -169,6 +171,7 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
void del_user_in_chan(clientData *user, channelData *chan);
|
void del_user_in_chan(clientData *user, channelData *chan);
|
||||||
|
void del_chan_in_user(clientData *user, channelData *chan);
|
||||||
void delete_user(fdList &allFds, int userNbr);
|
void delete_user(fdList &allFds, int userNbr);
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
@ -177,6 +180,7 @@ void delete_user(fdList &allFds, int userNbr);
|
|||||||
|
|
||||||
void ft_putstr_fd(int fd, std::string str);
|
void ft_putstr_fd(int fd, std::string str);
|
||||||
void cmd_error(fdList &allFds, int userNbr, std::string error);
|
void cmd_error(fdList &allFds, int userNbr, std::string error);
|
||||||
|
void cmd_reply(fdList &allFds, int userNbr, std::string error);
|
||||||
void ft_error(std::string str);
|
void ft_error(std::string str);
|
||||||
void close_fd(int fd);
|
void close_fd(int fd);
|
||||||
int contain_any(std::string str, std::string toFind);
|
int contain_any(std::string str, std::string toFind);
|
||||||
@ -200,6 +204,8 @@ void split_but_keep(std::string const &str, const char delim, std::vector<std::s
|
|||||||
/* *******************************CHAN UTILS********************************* */
|
/* *******************************CHAN UTILS********************************* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
int is_in_same(fdList &allFds, int userNbr, int userNbr2);
|
||||||
|
int is_chan_op(fdList &allFds, channelData *chanName, int userNbr);
|
||||||
int is_joined(fdList &allFds, std::string chanName, int userNbr);
|
int is_joined(fdList &allFds, std::string chanName, int userNbr);
|
||||||
int find_channel(fdList &allFds, std::string chanName);
|
int find_channel(fdList &allFds, std::string chanName);
|
||||||
int find_user(fdList &allFds, std::string userName);
|
int find_user(fdList &allFds, std::string userName);
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */
|
/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/13 19:21:07 by apommier ### ########.fr */
|
/* Updated: 2023/02/16 23:01:04 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ bool clientRequest(fdList &allFds, int userNbr)//,
|
|||||||
//buf.reserve(1024);
|
//buf.reserve(1024);
|
||||||
//se demerder pour join quand pas \n
|
//se demerder pour join quand pas \n
|
||||||
// std::cout << "fd in client request " << allFds.userData[userNbr].fd << std::endl;
|
// std::cout << "fd in client request " << allFds.userData[userNbr].fd << std::endl;
|
||||||
// std::cout << "fd of list in client request " << allFds.userList[userNbr] << std::endl;
|
// std::cout << "fd of list in client request " << allFds.userFdList[userNbr] << std::endl;
|
||||||
// std::cout << "user nbr " << userNbr << std::endl;
|
// std::cout << "user nbr " << userNbr << std::endl;
|
||||||
|
|
||||||
//std::cout << "client request!" << std::endl;
|
//std::cout << "client request!" << std::endl;
|
||||||
@ -38,7 +38,7 @@ bool clientRequest(fdList &allFds, int userNbr)//,
|
|||||||
delete_user(allFds, userNbr);
|
delete_user(allFds, userNbr);
|
||||||
// close(allFds.userData[userNbr].fd);
|
// close(allFds.userData[userNbr].fd);
|
||||||
// allFds.userData.erase(allFds.userData.begin() + userNbr);
|
// allFds.userData.erase(allFds.userData.begin() + userNbr);
|
||||||
// allFds.userList.erase(allFds.userList.begin() + userNbr);
|
// allFds.userFdList.erase(allFds.userFdList.begin() + userNbr);
|
||||||
// allFds.nbrUser--;
|
// allFds.nbrUser--;
|
||||||
// std::cout << "buffer empty\n";
|
// std::cout << "buffer empty\n";
|
||||||
return (1);
|
return (1);
|
||||||
|
|||||||
@ -6,26 +6,46 @@
|
|||||||
/* 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/02/14 20:13:38 by apommier ### ########.fr */
|
/* Updated: 2023/02/21 02:02:38 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "../../../includes/ft_irc.hpp"
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
int is_chan_op(fdList &allFds, channelData *chanName, int userNbr)
|
||||||
|
{
|
||||||
|
std::vector<clientData*>::iterator start = chanName->opList.begin();
|
||||||
|
std::vector<clientData*>::iterator pastEnd = chanName->opList.end();
|
||||||
|
//std::cout << "name1= ---" << chanName << "---\n";
|
||||||
|
if (allFds.userData[userNbr].op)
|
||||||
|
return (1);
|
||||||
|
while (start != pastEnd)
|
||||||
|
{
|
||||||
|
//std::cout << "result in find chan = " << pastEnd - start << std::endl;
|
||||||
|
std::cout << "test = " << chanName->opList[pastEnd - start - 1]->nickname << "---\n";
|
||||||
|
if (chanName->opList[pastEnd - start - 1]->nickname == allFds.userData[userNbr].nickname)
|
||||||
|
return (1);
|
||||||
|
start++;
|
||||||
|
}
|
||||||
|
std::cout << "chan not found in is op\n";
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
int is_joined(fdList &allFds, std::string chanName, int userNbr)
|
int is_joined(fdList &allFds, std::string chanName, int userNbr)
|
||||||
{
|
{
|
||||||
std::vector<channelData*>::iterator start = allFds.userData[userNbr].joinedChan.begin();
|
std::vector<channelData*>::iterator start = allFds.userData[userNbr].joinedChan.begin();
|
||||||
std::vector<channelData*>::iterator pastEnd = allFds.userData[userNbr].joinedChan.end();
|
std::vector<channelData*>::iterator pastEnd = allFds.userData[userNbr].joinedChan.end();
|
||||||
//std::cout << "name1= ---" << chanName << "---\n";
|
std::cout << "name1= ---" << chanName << "---\n";
|
||||||
while (start != pastEnd)
|
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";
|
std::cout << "result in find chan = " << pastEnd - start << std::endl;
|
||||||
|
std::cout << "test is joined= " << allFds.userData[userNbr].joinedChan[pastEnd - start - 1]->name << "---\n";
|
||||||
if (allFds.userData[userNbr].joinedChan[pastEnd - start - 1]->name == chanName)
|
if (allFds.userData[userNbr].joinedChan[pastEnd - start - 1]->name == chanName)
|
||||||
return (pastEnd - start - 1);
|
return (pastEnd - start - 1);
|
||||||
start++;
|
start++;
|
||||||
}
|
}
|
||||||
std::cout << "chan not found\n";
|
std::cout << "chan not found in is joined\n";
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,16 +53,16 @@ int find_channel(fdList &allFds, std::string chanName)//return channel nbr
|
|||||||
{
|
{
|
||||||
std::_List_iterator<channelData> start = allFds.channelList.begin();
|
std::_List_iterator<channelData> start = allFds.channelList.begin();
|
||||||
std::_List_iterator<channelData> pastEnd = allFds.channelList.end();
|
std::_List_iterator<channelData> pastEnd = allFds.channelList.end();
|
||||||
//std::cout << "name1= ---" << chanName << "---\n";
|
std::cout << "name1= ---" << chanName << "---\n";
|
||||||
while (start != pastEnd)
|
while (start != pastEnd)
|
||||||
{
|
{
|
||||||
//std::cout << "result in find chan = " << pastEnd - start << std::endl;
|
std::cout << "chan = ---" << allFds.channelList[pastEnd - start - 1].name << "---" << std::endl;
|
||||||
std::cout << "test = " << allFds.channelList[pastEnd - start - 1].name << "---\n";
|
std::cout << "test = " << allFds.channelList[pastEnd - start - 1].name << "---\n";
|
||||||
if (allFds.channelList[pastEnd - start - 1].name == chanName)
|
if (allFds.channelList[pastEnd - start - 1].name == chanName)
|
||||||
return (pastEnd - start - 1);
|
return (pastEnd - start - 1);
|
||||||
start++;
|
start++;
|
||||||
}
|
}
|
||||||
std::cout << "chan not found\n";
|
std::cout << "chan not found in find \n";
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,3 +83,38 @@ int find_user(fdList &allFds, std::string userName)//return direct user fd
|
|||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int is_in_same(fdList &allFds, int userNbr, int userNbr2)
|
||||||
|
{
|
||||||
|
size_t size;
|
||||||
|
if (allFds.userData[userNbr].joinedChan.size() <= allFds.userData[userNbr2].joinedChan.size())
|
||||||
|
size = allFds.userData[userNbr].joinedChan.size();
|
||||||
|
else
|
||||||
|
size = allFds.userData[userNbr2].joinedChan.size();
|
||||||
|
for (size_t i = 0; i < size; i++)
|
||||||
|
{
|
||||||
|
for (size_t j = 0; j < size; j++)
|
||||||
|
{
|
||||||
|
if (allFds.userData[userNbr].joinedChan[i] == allFds.userData[userNbr2].joinedChan[j])
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// int is_in_same(fdList &allFds, int userNbr, int userNbr2)
|
||||||
|
// {
|
||||||
|
// size_t size;
|
||||||
|
// if (allFds.userData[userNbr].joinedChan.size() <= allFds.userData[userNbr2].joinedChan.size())
|
||||||
|
// size = allFds.userData[userNbr].joinedChan.size();
|
||||||
|
// else
|
||||||
|
// size = allFds.userData[userNbr2].joinedChan.size();
|
||||||
|
// for (size_t i = 0; i < size; i++)
|
||||||
|
// {
|
||||||
|
// for (size_t j = 0; j < size; j++)
|
||||||
|
// {
|
||||||
|
// if (allFds.userData[userNbr].joinedChan[i] == allFds.userData[userNbr2].joinedChan[j])
|
||||||
|
// return (1);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return (0);
|
||||||
|
// }
|
||||||
|
|||||||
@ -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/02/14 14:50:57 by apommier ### ########.fr */
|
/* Updated: 2023/02/19 18:18:29 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -70,15 +70,14 @@ int chan_check(fdList &allFds, int userNbr, int chanNbr, std::vector<std::string
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void join_or_create(std::string buffer, fdList &allFds, int userNbr)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void join_or_create(std::vector<std::string> splitBuff, fdList &allFds, int userNbr)
|
|
||||||
{
|
{
|
||||||
int chanNbr;
|
int chanNbr;
|
||||||
channelData joined_chan;
|
channelData joined_chan;
|
||||||
|
std::vector<std::string> splitBuff;
|
||||||
|
|
||||||
|
std::cout << "JOINORCREATE\n";
|
||||||
|
split(buffer, ' ', splitBuff);
|
||||||
chanNbr = find_channel(allFds, splitBuff[1]);
|
chanNbr = find_channel(allFds, splitBuff[1]);
|
||||||
if (chanNbr != -1) //chan already exist
|
if (chanNbr != -1) //chan already exist
|
||||||
{
|
{
|
||||||
@ -93,22 +92,29 @@ void join_or_create(std::vector<std::string> splitBuff, fdList &allFds, int user
|
|||||||
{
|
{
|
||||||
std::cout << "new chan\n";
|
std::cout << "new chan\n";
|
||||||
channelData new_chan;
|
channelData new_chan;
|
||||||
|
if (splitBuff[1][0] != '#' && splitBuff[1][0] != '&')
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "476 * " + splitBuff[1] + " :Bad Channel Mask\n");
|
||||||
new_chan.name = splitBuff[1];
|
new_chan.name = splitBuff[1];
|
||||||
new_chan.nbrUser = 1;
|
new_chan.nbrUser = 1;
|
||||||
new_chan.userList.push_back(&allFds.userData[userNbr]);
|
new_chan.userList.push_back(&allFds.userData[userNbr]);
|
||||||
//new_chan.userList
|
|
||||||
joined_chan = new_chan;
|
joined_chan = new_chan;
|
||||||
allFds.channelList.push_back(new_chan);
|
allFds.channelList.push_back(new_chan);
|
||||||
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList.back());//add chan in user data
|
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList.back());//add chan in user data
|
||||||
}
|
}
|
||||||
|
std::string fullMsg;
|
||||||
|
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " JOIN :" + joined_chan.name + "\n";
|
||||||
for (int i = 0; i < joined_chan.nbrUser; i++)
|
for (int i = 0; i < joined_chan.nbrUser; i++)
|
||||||
{
|
{
|
||||||
std::string fullMsg;
|
|
||||||
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " JOIN :" + joined_chan.name + "\n";
|
|
||||||
send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
|
send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
|
||||||
std::cout << "loop here\n";
|
std::cout << "loop here\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (chanNbr == -1)
|
||||||
|
chanNbr = find_channel(allFds, splitBuff[1]);
|
||||||
|
if (!allFds.channelList[chanNbr].topic.empty())
|
||||||
|
cmd_reply(allFds, allFds.userData[userNbr].fd, "332 TOPIC " + allFds.channelList[chanNbr].name + " :" + allFds.channelList[chanNbr].topic + "\n");
|
||||||
|
else
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "331 TOPIC " + allFds.channelList[chanNbr].name + " :No topic is set\n");
|
||||||
// if (chanNbr == -1)
|
// if (chanNbr == -1)
|
||||||
// {
|
// {
|
||||||
|
|
||||||
@ -118,7 +124,44 @@ void join_or_create(std::vector<std::string> splitBuff, fdList &allFds, int user
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void join_loop(fdList &allFds, std::vector<std::string> splitBuff, int userNbr)
|
||||||
|
{
|
||||||
|
std::vector<std::string> splitChan;
|
||||||
|
std::vector<std::string> splitPwd;
|
||||||
|
std::string buffer;
|
||||||
|
|
||||||
|
std::cout << "join loop buf= " << splitBuff[1] << std::endl;
|
||||||
|
std::cout << "==========join loop========\n";
|
||||||
|
split(splitBuff[1], ',', splitChan);
|
||||||
|
split(splitBuff[1], ',', splitPwd);
|
||||||
|
if (splitBuff[1] == "0")
|
||||||
|
{
|
||||||
|
leave_all(allFds, userNbr);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
std::cout << "==========join loop2========\n";
|
||||||
|
std::cout << "size= " << splitChan.size() << std::endl;
|
||||||
|
std::cout << "content= " << splitChan[0] << std::endl;
|
||||||
|
for (size_t i = 0; i < splitChan.size(); i++)
|
||||||
|
{
|
||||||
|
if (splitChan[i][0] != '#' && splitChan[i][0] != '&')
|
||||||
|
{
|
||||||
|
//error bad channel name
|
||||||
|
buffer = "476 * JOIN " + splitChan[i] + " ::Bad Channel Mask\n";
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, buffer);
|
||||||
|
//:Bad Channel Mask
|
||||||
|
std::cout << "bad chan mask\n";
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if (i < splitPwd.size())
|
||||||
|
buffer = "JOIN " + splitChan[i] + " " + splitPwd[i];
|
||||||
|
else
|
||||||
|
buffer = "JOIN " + splitChan[i];
|
||||||
|
join_or_create(buffer, allFds, userNbr);
|
||||||
|
std::cout << "i= " << i << " ==========join loop3========\n";
|
||||||
|
}
|
||||||
|
std::cout << "==========join loop3========\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -132,7 +175,7 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
std::cout << "userNbr= " << userNbr << std::endl;
|
std::cout << "userNbr= " << userNbr << std::endl;
|
||||||
if (!allFds.userData[userNbr].registered)
|
if (!allFds.userData[userNbr].registered)
|
||||||
{
|
{
|
||||||
/*change error*/
|
std::cout << "user not registered\n";
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not registered\n"); //ERR_NEEDMOREPARAMS
|
cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not registered\n"); //ERR_NEEDMOREPARAMS
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
@ -140,23 +183,12 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
if (splitBuff.size() < 2)
|
if (splitBuff.size() < 2)
|
||||||
{
|
{
|
||||||
/*change error*/
|
/*change error*/
|
||||||
|
std::cout << "JOIN : need more param\n";
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * JOIN :Not enough parameters\n"); //ERR_NEEDMOREPARAMS
|
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * JOIN :Not enough parameters\n"); //ERR_NEEDMOREPARAMS
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
join_loop(allFds, splitBuff, userNbr);
|
||||||
//if (splitBuff[1].find(' ') != std::string::npos || splitBuff[1].find(7) != std::string::npos)
|
//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)
|
//send 352 and 315 or 353 and 366 (WHO or NAME)
|
||||||
}
|
}
|
||||||
12
srcs/commands/channel/list.cpp
Normal file
12
srcs/commands/channel/list.cpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* list.cpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* 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 */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
66
srcs/commands/channel/part.cpp
Normal file
66
srcs/commands/channel/part.cpp
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* part.cpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2023/02/19 22:10:07 by apommier #+# #+# */
|
||||||
|
/* Updated: 2023/02/20 17:50:46 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
void leave_chan(fdList &allFds, std::string chan, int userNbr, std::string msg)
|
||||||
|
{
|
||||||
|
int chanPos;
|
||||||
|
std::string reply;
|
||||||
|
|
||||||
|
if ((chanPos = find_channel(allFds, chan)) == -1)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "401 * PART " + chan + " :No such nick/channel\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if (is_joined(allFds, chan, userNbr) == -1)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "422 * " + chan + " :You're not on that channel\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
del_user_in_chan(&allFds.userData[userNbr], &allFds.channelList[chanPos]);
|
||||||
|
del_chan_in_user(&allFds.userData[userNbr], &allFds.channelList[chanPos]);
|
||||||
|
//:WiZ!jto@tolsun.oulu.fi PART #playzone :I lost
|
||||||
|
//:awd!kinou@kinou PART #test
|
||||||
|
//reply = ":" + allFds.userData[userNbr].nickname + "!" +
|
||||||
|
|
||||||
|
//reply = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " PART " + allFds.channelList[chanPos].name;
|
||||||
|
reply = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].hostName + " PART " + allFds.channelList[chanPos].name + "\n";
|
||||||
|
//:awd!kinou@172.17.0.1 PART :#test tcpdump
|
||||||
|
//:awd!kinou@127.0.0.1 PART :#test
|
||||||
|
(void )msg;
|
||||||
|
//if (!msg.empty())
|
||||||
|
// reply += " :" + msg;
|
||||||
|
std::cout << "leave msg=" << reply << std::endl;
|
||||||
|
send(allFds.userData[userNbr].fd, reply.c_str(), reply.size(), 0);
|
||||||
|
//cmd_reply(allFds, allFds.userData[userNbr].fd, reply + "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void PART(std::string buffer, fdList &allFds, int userNbr)
|
||||||
|
{
|
||||||
|
std::vector<std::string> splitBuff;
|
||||||
|
std::vector<std::string> splitChan;
|
||||||
|
std::string msg;
|
||||||
|
|
||||||
|
split(buffer, ' ', splitBuff);
|
||||||
|
if (splitBuff.size() < 2)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "431 * PART :Not enought argument\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
split(splitBuff[1], ',', splitChan);
|
||||||
|
if (splitBuff.size() > 2)
|
||||||
|
msg = buffer.substr(splitBuff[0].size() + splitBuff[1].size() + 2, std::string::npos);
|
||||||
|
for (size_t i = 0; i < splitChan.size(); i++)
|
||||||
|
leave_chan(allFds, splitChan[i], userNbr, msg);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/11 08:53:03 by apommier #+# #+# */
|
/* Created: 2023/02/11 08:53:03 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/15 15:18:38 by apommier ### ########.fr */
|
/* Updated: 2023/02/20 11:51:26 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "412 * PRIVMSG :No text to send\n");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "412 * PRIVMSG :No text to send\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
std::cout << "privmsg =" << msg << std::endl;
|
//std::cout << "privmsg =" << msg << std::endl;
|
||||||
std::vector<std::string> dest;
|
std::vector<std::string> dest;
|
||||||
split(splitBuff[1], ',', dest);
|
split(splitBuff[1], ',', dest);
|
||||||
for (size_t i = 0; i < dest.size(); i++)
|
for (size_t i = 0; i < dest.size(); i++)
|
||||||
@ -52,16 +52,22 @@ void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
|
|||||||
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\n";
|
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\n";
|
||||||
if (dest[0] == '&' || dest[0] == '#')
|
if (dest[0] == '&' || dest[0] == '#')
|
||||||
{
|
{
|
||||||
if (is_joined(allFds, dest, userNbr) == -1)
|
pos = find_channel(allFds, dest);
|
||||||
{
|
if (pos == -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");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "401 * PRIVMSG " + dest + " :No such nick/channel\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
if (allFds.channelList[pos].mode.n && 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 (allFds.channelList[pos].mode.m && !allFds.userData[userNbr].op && !is_chan_op(allFds, &allFds.channelList[pos], userNbr) && !allFds.channelList[pos].userMode[nbr].v)
|
||||||
|
// {
|
||||||
|
// cmd_error(allFds, allFds.userData[userNbr].fd, "404 * PRIVMSG " + dest + " :Cannot send to channel\n");
|
||||||
|
// return ;
|
||||||
|
// }
|
||||||
for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++)
|
for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++)
|
||||||
{
|
{
|
||||||
std::cout << "send nickname " << allFds.channelList[pos].userList[i]->nickname << std::endl;
|
std::cout << "send nickname " << allFds.channelList[pos].userList[i]->nickname << std::endl;
|
||||||
@ -72,10 +78,13 @@ void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
|
|||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
pos = find_user(allFds, dest); //return direct user fd
|
pos = find_user(allFds, dest); //return direct user fd
|
||||||
if (pos != -1)
|
std::cout << "pos of user = " << pos << std::endl;
|
||||||
|
if (pos == -1)
|
||||||
{
|
{
|
||||||
cmd_error(allFds, allFds.userData[userNbr].fd, "401 * PRIVMSG " + dest + " :No such nick/channel\n");
|
cmd_error(allFds, allFds.userData[userNbr].fd, "401 * PRIVMSG " + dest + " :No such nick/channel\n");
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
send(allFds.userData[pos].fd, fullMsg.c_str(), fullMsg.size(), 0);
|
send(allFds.userData[pos].fd, fullMsg.c_str(), fullMsg.size(), 0);
|
||||||
|
std::cout << "msg send\n";
|
||||||
|
std::cout << "msg = " << fullMsg << std::endl;
|
||||||
}
|
}
|
||||||
@ -6,16 +6,68 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/11 19:19:56 by apommier #+# #+# */
|
/* Created: 2023/02/11 19:19:56 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/11 20:06:47 by apommier ### ########.fr */
|
/* Updated: 2023/02/19 22:27:00 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "../../../includes/ft_irc.hpp"
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
// Commande: INVITE
|
||||||
|
// Paramètres: <pseudonyme> <canal>
|
||||||
|
|
||||||
|
// ERR_NEEDMOREPARAMS ERR_NOSUCHNICK
|
||||||
|
// ERR_NOTONCHANNEL ERR_USERONCHANNEL
|
||||||
|
// ERR_CHANOPRIVSNEEDED
|
||||||
|
// RPL_INVITING RPL_AWAY
|
||||||
|
|
||||||
void INVITE(std::string buffer, fdList &allFds, int userNbr)
|
void INVITE(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
(void)buffer;
|
std::vector<std::string> splitBuff;
|
||||||
(void)allFds;
|
int invitedNbr;
|
||||||
(void)userNbr;
|
channelData chan;
|
||||||
|
int chanNbr;
|
||||||
|
|
||||||
|
split(buffer, ' ', splitBuff);
|
||||||
|
if (splitBuff.size() < 3)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * INVITE :Not enough parameters\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if ((invitedNbr = find_user(allFds, splitBuff[1])) == -1)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "401 * " + splitBuff[1] + " :No such nick/channel\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if (is_joined(allFds, splitBuff[2], userNbr) == -1)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "422 * " + splitBuff[2] + " :You're not on that channel\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if (is_joined(allFds, splitBuff[2], invitedNbr) != -1)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "443 * " + splitBuff[1] + " " + splitBuff[2] + " :is already on channel\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
// if (is_joined(allFds, splitBuff[2], invitedNbr) != -1)
|
||||||
|
// {
|
||||||
|
// cmd_error(allFds, allFds.userData[userNbr].fd, "443 * " + splitBuff[1] + " " + splitBuff[2] + " :is already on channel\n");
|
||||||
|
// return ;
|
||||||
|
// }
|
||||||
|
if ((chanNbr = find_channel(allFds, splitBuff[2])) != -1)
|
||||||
|
{
|
||||||
|
chan = allFds.channelList[chanNbr];
|
||||||
|
if (!is_chan_op(allFds, &chan, userNbr))
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "482 * " + splitBuff[2] + " :You're not channel operator\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
else if (!allFds.userData[userNbr].op)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "482 * " + splitBuff[2] + " :You're not channel operator\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
std::cout << "invite him !!!!" << splitBuff[1] << " to " << splitBuff[2] << std::endl;
|
||||||
|
//RPL_INVITING
|
||||||
|
//RPL_AWAY
|
||||||
|
//set authorization to join
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
@ -6,16 +6,73 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/11 19:19:32 by apommier #+# #+# */
|
/* Created: 2023/02/11 19:19:32 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/11 20:06:32 by apommier ### ########.fr */
|
/* Updated: 2023/02/21 00:42:37 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "../../../includes/ft_irc.hpp"
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
//Paramètres: <canal> <utilisateur> [<commentaire>]
|
||||||
|
|
||||||
void KICK(std::string buffer, fdList &allFds, int userNbr)
|
void KICK(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
(void)buffer;
|
std::vector<std::string> splitBuff;
|
||||||
(void)allFds;
|
std::string msg;
|
||||||
(void)userNbr;
|
std::string kickMsg;
|
||||||
|
int chanPos;
|
||||||
|
int userPos;
|
||||||
|
channelData chan;
|
||||||
|
|
||||||
|
split(buffer, ' ', splitBuff);
|
||||||
|
if (splitBuff.size() < 3)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "431 * KICK :Not enought argument\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((chanPos = find_channel(allFds, splitBuff[1])) == -1)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "401 * KICK " + splitBuff[1] + " :No such nick/channel\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if (!allFds.userData[userNbr].op && is_joined(allFds, splitBuff[1], userNbr) == -1)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "422 * " + splitBuff[1] + " :You're not on that channel\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if (chanPos != -1)
|
||||||
|
{
|
||||||
|
chan = allFds.channelList[chanPos];
|
||||||
|
if (!is_chan_op(allFds, &chan, userNbr) && !allFds.userData[userNbr].op)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "482 * " + splitBuff[1] + " :You're not channel operator\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
msg = ":" + allFds.userData[userNbr].nickname + " KICK " + chan.name + " " + splitBuff[2];
|
||||||
|
if (splitBuff.size() > 3)
|
||||||
|
msg += ": " + buffer.substr(splitBuff[0].size() + splitBuff[1].size() + splitBuff[2].size() + 1, std::string::npos);
|
||||||
|
if ((userPos = find_user(allFds, splitBuff[2])) == -1)
|
||||||
|
{
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
kickMsg = allFds.userData[userPos].nickname + " have been kicked by " + allFds.userData[userNbr].nickname + "\n";
|
||||||
|
PART("PART " + splitBuff[1], allFds, userPos);
|
||||||
|
//del_user_in_chan(&allFds.userData[userPos], &allFds.channelList[chanPos]);
|
||||||
|
//del_chan_in_user(&allFds.userData[userPos], &allFds.channelList[chanPos]);
|
||||||
|
std::cout << "kick msg---" << msg << "---" << std::endl;
|
||||||
|
send(allFds.userData[userPos].fd, msg.c_str(), msg.size(), 0);
|
||||||
|
//send_msg(allFds, msg, splitBuff[1], userNbr);
|
||||||
|
for (int i = 0; i < allFds.channelList[chanPos].nbrUser; i++)
|
||||||
|
{
|
||||||
|
send(allFds.channelList[chanPos].userList[i]->fd, kickMsg.c_str(), kickMsg.size(), 0);
|
||||||
|
}
|
||||||
|
//cmd_reply(allFds, allFds.userData[userPos].fd, msg);
|
||||||
|
|
||||||
|
// else if (!allFds.userData[userNbr].op)
|
||||||
|
// {
|
||||||
|
// cmd_error(allFds, allFds.userData[userNbr].fd, "482 * " + splitBuff[1] + " :You're not channel operator\n");
|
||||||
|
// return ;
|
||||||
|
// }
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/11 19:19:52 by apommier #+# #+# */
|
/* Created: 2023/02/11 19:19:52 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/11 20:05:50 by apommier ### ########.fr */
|
/* Updated: 2023/02/19 22:07:14 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -14,8 +14,52 @@
|
|||||||
|
|
||||||
void TOPIC(std::string buffer, fdList &allFds, int userNbr)
|
void TOPIC(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
(void)buffer;
|
channelData chan;
|
||||||
(void)allFds;
|
int chanNbr;
|
||||||
(void)userNbr;
|
std::vector<std::string> splitBuff;
|
||||||
|
|
||||||
|
std::cout << "topic im here1\n";//RPL_NOTOPIC //RPL_TOPIC
|
||||||
|
split(buffer, ' ', splitBuff);
|
||||||
|
if (splitBuff.size() < 2)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * TOPIC :Not enough parameters\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if (is_joined(allFds, splitBuff[1], userNbr) == -1)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "422 * " + splitBuff[1] + " :You're not on that channel\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if ((chanNbr = find_channel(allFds, splitBuff[1])) != -1)
|
||||||
|
{
|
||||||
|
chan = allFds.channelList[chanNbr];
|
||||||
|
if (!is_chan_op(allFds, &chan, userNbr) && !allFds.userData[userNbr].op)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "482 * " + splitBuff[1] + " :You're not channel operator\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// else if (!allFds.userData[userNbr].op && !allFds.userData[userNbr].op)
|
||||||
|
// {
|
||||||
|
// cmd_error(allFds, allFds.userData[userNbr].fd, "482 * " + splitBuff[1] + " :You're not channel operator\n");
|
||||||
|
// return ;
|
||||||
|
// }
|
||||||
|
std::cout << "topic im here2\n";//RPL_NOTOPIC //RPL_TOPIC
|
||||||
|
if (splitBuff.size() < 3)
|
||||||
|
{
|
||||||
|
if (!allFds.channelList[chanNbr].topic.empty())
|
||||||
|
cmd_reply(allFds, allFds.userData[userNbr].fd, "332 TOPIC " + splitBuff[1] + " :" + allFds.channelList[chanNbr].topic + "\n");
|
||||||
|
else
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "331 TOPIC " + splitBuff[1] + " :No topic is set\n");
|
||||||
|
return;
|
||||||
|
//std::cout << "PRINT TOPIC here\n";//RPL_NOTOPIC //RPL_TOPIC
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
allFds.channelList[chanNbr].topic = buffer.substr(6 + splitBuff[1].size() + 2, std::string::npos);
|
||||||
|
//std::cout << "topic= " << allFds.channelList[chanNbr].topic << std::endl;
|
||||||
|
cmd_reply(allFds, allFds.userData[userNbr].fd, "332 TOPIC " + splitBuff[1] + " :" + allFds.channelList[chanNbr].topic + "\n");
|
||||||
|
//std::cout << "PRINT TOPIC here topic set\n";//RPL_NOTOPIC //RPL_TOPIC
|
||||||
|
}
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
@ -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/15 17:00:46 by apommier ### ########.fr */
|
/* Updated: 2023/02/19 22:11:59 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -28,24 +28,10 @@ void SERVER(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
// return ;
|
// return ;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
void PART(std::string buffer, fdList &allFds, int userNbr)
|
|
||||||
{
|
|
||||||
(void)buffer;
|
|
||||||
(void)allFds;
|
|
||||||
(void)userNbr;
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void NAMES(std::string buffer, fdList &allFds, int userNbr)
|
|
||||||
{
|
|
||||||
(void)buffer;
|
|
||||||
(void)allFds;
|
|
||||||
(void)userNbr;
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LIST(std::string buffer, fdList &allFds, int userNbr)
|
void LIST(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
@ -139,13 +125,7 @@ void INFO(std::string buffer, fdList &allFds, int userNbr)
|
|||||||
// return ;
|
// return ;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
void WHO(std::string buffer, fdList &allFds, int userNbr)
|
|
||||||
{
|
|
||||||
(void)buffer;
|
|
||||||
(void)allFds;
|
|
||||||
(void)userNbr;
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WHOIS(std::string buffer, fdList &allFds, int userNbr)
|
void WHOIS(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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/02/15 19:43:22 by apommier ### ########.fr */
|
/* Updated: 2023/02/17 20:38:40 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -41,6 +41,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;
|
||||||
msg = "381 * " + allFds.userData[userNbr].nickname + " :You are now an IRC operator\n";
|
msg = "381 * " + allFds.userData[userNbr].nickname + " :You are now an IRC operator\n";
|
||||||
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
|
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
|
||||||
}
|
}
|
||||||
36
srcs/commands/operator/wallops.cpp
Normal file
36
srcs/commands/operator/wallops.cpp
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* wallops.cpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2023/02/16 17:09:38 by apommier #+# #+# */
|
||||||
|
/* Updated: 2023/02/17 21:13:21 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
void WALLOPS(std::string buffer, fdList &allFds, int userNbr)
|
||||||
|
{
|
||||||
|
std::vector<std::string> splitBuff;
|
||||||
|
std::string msg;
|
||||||
|
|
||||||
|
//std::cout << "privmsg bufer= --" << buffer << std::endl;
|
||||||
|
split(buffer, ' ', splitBuff);
|
||||||
|
if (splitBuff.size() < 2)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "431 * WALLOPS :Not enought argument\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
msg = ":" + allFds.userData[userNbr].nickname + " WALLOPS :" + buffer.substr(splitBuff[1].size() + std::string::npos + 1) + "\n";
|
||||||
|
//msg = "PRIVMSG " + allFds.userData[userNbr].nickname + " " + buffer.substr(splitBuff[1].size() + std::string::npos + 1);
|
||||||
|
for (int i = 0; i < allFds.nbrUser; i++)
|
||||||
|
{
|
||||||
|
if (allFds.userData[i].op && allFds.userData[i].mode.s)
|
||||||
|
send(allFds.userData[i].fd, msg.c_str(), msg.size(), 0);
|
||||||
|
//PRIVMSG(msg, allFds, userNbr);
|
||||||
|
}
|
||||||
|
}
|
||||||
68
srcs/commands/other/names.cpp
Normal file
68
srcs/commands/other/names.cpp
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* names.cpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2023/02/16 18:14:15 by apommier #+# #+# */
|
||||||
|
/* Updated: 2023/02/22 20:04:19 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
//: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)
|
||||||
|
{
|
||||||
|
std::string msg;
|
||||||
|
msg = "353 " + user + " = " + chan.name + " :";
|
||||||
|
for (int i = 0; i < chan.nbrUser; i++)
|
||||||
|
{
|
||||||
|
if (chan.userList[i]->mode.o)//ischanop
|
||||||
|
msg += "=" + chan.userList[i]->nickname + " ";
|
||||||
|
else if (chan.userList[i]->mode.o)//verbose
|
||||||
|
msg += "@" + chan.userList[i]->nickname + " ";
|
||||||
|
else
|
||||||
|
msg += "+" + chan.userList[i]->nickname + " ";
|
||||||
|
}
|
||||||
|
msg += "\n";
|
||||||
|
std::cout << "name msg= " << msg;
|
||||||
|
cmd_reply(allFds, fd, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NAMES(std::string buffer, fdList &allFds, int userNbr)
|
||||||
|
{
|
||||||
|
(void)buffer;
|
||||||
|
(void)allFds;
|
||||||
|
(void)userNbr;
|
||||||
|
std::vector<std::string> splitBuff;
|
||||||
|
int pos;
|
||||||
|
|
||||||
|
split(buffer, ' ', splitBuff);
|
||||||
|
if (splitBuff.size() == 1 || splitBuff[1] == "0")
|
||||||
|
{
|
||||||
|
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))
|
||||||
|
{
|
||||||
|
names_reply(allFds, allFds.channelList[i], allFds.userData[userNbr].fd, allFds.userData[userNbr].nickname);
|
||||||
|
//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; //??
|
||||||
|
}
|
||||||
|
return ;
|
||||||
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/11 19:10:26 by apommier #+# #+# */
|
/* Created: 2023/02/11 19:10:26 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/15 20:15:13 by apommier ### ########.fr */
|
/* Updated: 2023/02/16 22:25:37 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -40,10 +40,11 @@ void send_quit_msg(fdList &allFds, int userNbr, std::string msg)
|
|||||||
void QUIT(std::string buffer, fdList &allFds, int userNbr)
|
void QUIT(std::string buffer, fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
std::vector<std::string> splitBuff;
|
std::vector<std::string> splitBuff;
|
||||||
|
|
||||||
split(buffer, ' ', splitBuff);
|
split(buffer, ' ', splitBuff);
|
||||||
if (splitBuff.size() == 2)
|
if (splitBuff.size() > 2)
|
||||||
{
|
{
|
||||||
send_quit_msg(allFds, userNbr, splitBuff[1]);
|
send_quit_msg(allFds, userNbr, buffer.substr(5, std::string::npos));//to test
|
||||||
//print message?
|
//print message?
|
||||||
//:kinou2!kinou@172.17.0.1 QUIT :Quit: leaving
|
//:kinou2!kinou@172.17.0.1 QUIT :Quit: leaving
|
||||||
}
|
}
|
||||||
|
|||||||
73
srcs/commands/other/who.cpp
Normal file
73
srcs/commands/other/who.cpp
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* who.cpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2023/02/16 18:14:17 by apommier #+# #+# */
|
||||||
|
/* Updated: 2023/02/22 13:03:30 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
//void who_reply(fdList &allFds, int userNbr, int fd)
|
||||||
|
void who_reply(fdList &allFds, clientData &user, int fd)
|
||||||
|
{
|
||||||
|
// std::string msg;
|
||||||
|
// //:<server> 352 <channel> <username> <hostname> <server> <nick> H :0 <realname>
|
||||||
|
// //if (chan.size())
|
||||||
|
// msg = "352 " /*+ chan + " " */
|
||||||
|
// + allFds.userData[userNbr].userName + " "
|
||||||
|
// + allFds.userData[userNbr].hostName + " irc.local "
|
||||||
|
// + allFds.userData[userNbr].nickname + " :0 "
|
||||||
|
// + allFds.userData[userNbr].realName + "\n";
|
||||||
|
|
||||||
|
// cmd_reply(allFds, fd, msg);
|
||||||
|
|
||||||
|
|
||||||
|
std::string msg;
|
||||||
|
//:<server> 352 <channel> <username> <hostname> <server> <nick> H :0 <realname>
|
||||||
|
//if (chan.size())
|
||||||
|
msg = "352 " /*+ chan + " " */
|
||||||
|
+ user.userName + " "
|
||||||
|
+ user.hostName + " irc.local "
|
||||||
|
+ user.nickname + " :0 "
|
||||||
|
+ user.realName + "\n";
|
||||||
|
std::cout << "whoreply= " << msg << std::endl;
|
||||||
|
cmd_reply(allFds, fd, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WHO(std::string buffer, fdList &allFds, int userNbr)
|
||||||
|
{
|
||||||
|
std::vector<std::string> splitBuff;
|
||||||
|
int pos;
|
||||||
|
(void) userNbr;
|
||||||
|
split(buffer, ' ', splitBuff);
|
||||||
|
if (splitBuff.size() == 1 || splitBuff[1] == "0")
|
||||||
|
{
|
||||||
|
for (int i = 0; i < allFds.nbrUser; i++)
|
||||||
|
{
|
||||||
|
if (!allFds.userData[i].mode.i || is_in_same(allFds, userNbr, i))
|
||||||
|
{
|
||||||
|
who_reply(allFds, allFds.userData[i], allFds.userData[userNbr].fd);
|
||||||
|
//print who
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if ((pos = find_channel(allFds, splitBuff[1])) == -1)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, allFds.userData[userNbr].fd, "401 * " + splitBuff[1] + " :No such nick/channel\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < allFds.channelList[pos].nbrUser; i++)
|
||||||
|
{
|
||||||
|
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");
|
||||||
|
//std::cout <<
|
||||||
|
return ;
|
||||||
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2023/02/12 20:38:50 by apommier #+# #+# */
|
/* Created: 2023/02/12 20:38:50 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/13 20:25:45 by apommier ### ########.fr */
|
/* Updated: 2023/02/17 21:49:52 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -21,6 +21,15 @@ void del_user_in_chan(clientData *user, channelData *chan)
|
|||||||
chan->nbrUser--;
|
chan->nbrUser--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void del_chan_in_user(clientData *user, channelData *chan)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
for (i = 0; chan != user->joinedChan[i]; i++)
|
||||||
|
;
|
||||||
|
user->joinedChan.erase(user->joinedChan.begin() + i);
|
||||||
|
//user->nbrUser--;
|
||||||
|
}
|
||||||
|
|
||||||
void delete_user(fdList &allFds, int userNbr)
|
void delete_user(fdList &allFds, int userNbr)
|
||||||
{
|
{
|
||||||
std::cout << "Delete user nbr " << userNbr << std::endl;
|
std::cout << "Delete user nbr " << userNbr << std::endl;
|
||||||
@ -33,7 +42,7 @@ void delete_user(fdList &allFds, int userNbr)
|
|||||||
close(allFds.userData[userNbr].fd);
|
close(allFds.userData[userNbr].fd);
|
||||||
|
|
||||||
allFds.userData.erase(allFds.userData.begin() + userNbr);
|
allFds.userData.erase(allFds.userData.begin() + userNbr);
|
||||||
allFds.userList.erase(allFds.userList.begin() + userNbr);
|
allFds.userFdList.erase(allFds.userFdList.begin() + userNbr);
|
||||||
|
|
||||||
allFds.nbrUser--;
|
allFds.nbrUser--;
|
||||||
}
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/12/06 21:38:30 by apommier #+# #+# */
|
/* Created: 2022/12/06 21:38:30 by apommier #+# #+# */
|
||||||
/* Updated: 2022/12/06 21:50:06 by apommier ### ########.fr */
|
/* Updated: 2023/02/22 12:59:31 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -15,6 +15,7 @@
|
|||||||
void epoll_add(int epollFd, int fd)
|
void epoll_add(int epollFd, int fd)
|
||||||
{
|
{
|
||||||
struct epoll_event event;
|
struct epoll_event event;
|
||||||
|
memset(&event, 0, sizeof(event));
|
||||||
event.events = EPOLLIN;
|
event.events = EPOLLIN;
|
||||||
event.data.fd = fd;
|
event.data.fd = fd;
|
||||||
|
|
||||||
|
|||||||
@ -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/02/13 19:46:41 by apommier ### ########.fr */
|
/* Updated: 2023/02/16 23:01:04 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -29,10 +29,10 @@ void new_connection(fdList &allFds)
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
//int newUserFd;
|
//int newUserFd;
|
||||||
//allFds.userList.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);
|
||||||
//allFds.userList[allFds.nbrUser] = newFd;
|
//allFds.userFdList[allFds.nbrUser] = newFd;
|
||||||
allFds.userList.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;
|
||||||
if (fcntl(newFd, F_SETFL, O_NONBLOCK) == -1)
|
if (fcntl(newFd, F_SETFL, O_NONBLOCK) == -1)
|
||||||
ft_error("fctnl() error");
|
ft_error("fctnl() error");
|
||||||
@ -40,7 +40,7 @@ void new_connection(fdList &allFds)
|
|||||||
|
|
||||||
//std::cout << "fcntl return = " << newFd;
|
//std::cout << "fcntl return = " << newFd;
|
||||||
//close(newFd);
|
//close(newFd);
|
||||||
//std::cout << "newConnection | user fd = " << allFds.userList[allFds.nbrUser] << std::endl;
|
//std::cout << "newConnection | user fd = " << allFds.userFdList[allFds.nbrUser] << std::endl;
|
||||||
|
|
||||||
clientData newElement;
|
clientData newElement;
|
||||||
newElement.fd = newFd;
|
newElement.fd = newFd;
|
||||||
@ -48,9 +48,9 @@ void new_connection(fdList &allFds)
|
|||||||
newElement.ip = inet_ntoa(addr.sin_addr);
|
newElement.ip = inet_ntoa(addr.sin_addr);
|
||||||
//newElement.op = 0;
|
//newElement.op = 0;
|
||||||
allFds.userData.push_back(newElement);
|
allFds.userData.push_back(newElement);
|
||||||
//allFds.userData[allFds.nbrUser].fd = allFds.userList[allFds.nbrUser];
|
//allFds.userData[allFds.nbrUser].fd = allFds.userFdList[allFds.nbrUser];
|
||||||
//std::cout << "newConnection | user in data fd = " << allFds.userData[allFds.nbrUser].fd << std::endl;
|
//std::cout << "newConnection | user in data fd = " << allFds.userData[allFds.nbrUser].fd << std::endl;
|
||||||
|
|
||||||
epoll_add(allFds.epollFd, allFds.userList[allFds.nbrUser]);
|
epoll_add(allFds.epollFd, allFds.userFdList[allFds.nbrUser]);
|
||||||
allFds.nbrUser++;
|
allFds.nbrUser++;
|
||||||
}
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/12/06 21:58:13 by apommier #+# #+# */
|
/* Created: 2022/12/06 21:58:13 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/14 18:11:44 by apommier ### ########.fr */
|
/* Updated: 2023/02/16 23:01:04 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ void start_loop(fdList &allFds)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nbr = find(allFds.userList.begin(), allFds.userList.end(), allFds.events[i].data.fd) - allFds.userList.begin();
|
nbr = find(allFds.userFdList.begin(), allFds.userFdList.end(), allFds.events[i].data.fd) - allFds.userFdList.begin();
|
||||||
//if (!clientRequest(allFds, i))
|
//if (!clientRequest(allFds, i))
|
||||||
// if (!clientRequest(allFds, nbr))
|
// if (!clientRequest(allFds, nbr))
|
||||||
// alive = false;
|
// alive = false;
|
||||||
|
|||||||
@ -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/02/14 14:27:33 by apommier ### ########.fr */
|
/* Updated: 2023/02/22 20:03:09 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -47,6 +47,17 @@ void cmd_error(fdList &allFds, int fd, std::string error)
|
|||||||
send(fd, error.c_str(), error.size(), 0);
|
send(fd, error.c_str(), error.size(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cmd_reply(fdList &allFds, int fd, std::string error)
|
||||||
|
{
|
||||||
|
|
||||||
|
(void)allFds; //to delete
|
||||||
|
error = ":irc.local " + error;
|
||||||
|
//std::cout << cmd_reply= --- << error << "---";
|
||||||
|
//write(fd, ":irc.local ", 11);
|
||||||
|
//write(fd, error.c_str(), error.size());
|
||||||
|
send(fd, error.c_str(), error.size(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
int contain_any(std::string str, std::string toFind)
|
int contain_any(std::string str, std::string toFind)
|
||||||
{
|
{
|
||||||
for (int i = 0; toFind[i] != 0; i++)
|
for (int i = 0; toFind[i] != 0; i++)
|
||||||
@ -67,8 +78,16 @@ int not_contain_other(std::string str, std::string toFind)
|
|||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// void find_user_in_chan(fdList &allFds, channelData *chan)
|
int find_client_list(std::vector<clientData *> list, clientData *client)
|
||||||
// {
|
{
|
||||||
|
std::vector<clientData*>::iterator start = list.begin();
|
||||||
// }
|
std::vector<clientData*>::iterator pastEnd = list.end();
|
||||||
|
while (start != pastEnd)
|
||||||
|
{
|
||||||
|
if (*start == client)
|
||||||
|
return (start - pastEnd - 1);
|
||||||
|
start++;
|
||||||
|
}
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user