clean all comment

This commit is contained in:
kinou-p 2023-03-13 16:44:47 +01:00
parent a16ccf5611
commit 47343e6931
31 changed files with 87 additions and 608 deletions

View File

@ -6,50 +6,28 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */
/* Updated: 2023/03/09 05:00:20 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:39:34 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../includes/ft_irc.hpp"
bool clientRequest(fdList &allFds, int userNbr)//,
bool clientRequest(fdList &allFds, int userNbr)
{
//int userFd = allFds.events[user].data.fd;
char buf[1024] = {0};
std::string buffer;
size_t len = 1024;
int ret = 0;
//buf.reserve(1024);
//se demerder pour join quand pas \n
// std::cout << "fd in client request " << allFds.userData[userNbr].fd << std::endl;
// std::cout << "fd of list in client request " << allFds.userFdList[userNbr] << std::endl;
// std::cout << "user nbr " << userNbr << std::endl;
//std::cout << "client request!" << std::endl;
//if (recv(allFds.userData[userNbr].fd, buf, len, 0) == -1)
if ((ret = recv(allFds.userData[userNbr].fd, buf, len, 0)) == -1)
ft_error("recv() error");
buffer = buf;
buffer[ret] = 0;
if (buffer.empty())
{
//delete client
delete_user(allFds, userNbr);
// close(allFds.userData[userNbr].fd);
// allFds.userData.erase(allFds.userData.begin() + userNbr);
// allFds.userFdList.erase(allFds.userFdList.begin() + userNbr);
// allFds.nbrUser--;
// std::cout << "buffer empty\n";
return (1);
}
// for (int i = 0; buffer[i]; i++)
// {
// std::cout << i << " = " << (int)buffer[i] << std::endl;
// }
//split with \n and while (tab de split) -> parsing
std::vector<std::string> splitBuff;
split_but_keep(buffer, '\n', splitBuff);
for (size_t i = 0; i < splitBuff.size(); i++)

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/12 23:30:11 by apommier #+# #+# */
/* Updated: 2023/03/10 22:19:44 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:28:12 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -53,19 +53,12 @@ void print_registered_msg(fdList &allFds, int userNbr)
void connect_client(fdList &allFds, int userNbr)
{
//std::cout << "connect client start\n";
if (allFds.userData[userNbr].password.empty() || allFds.userData[userNbr].password != allFds.password)
{
std::cout << "password= " << allFds.userData[userNbr].password << std::endl;
cmd_error(allFds, allFds.userData[userNbr].fd, "464 * :Password incorrect\r\n");
return ;
}
//464 ERR_PASSWDMISMATCH
//":Password incorrect"
allFds.userData[userNbr].registered = 1;
print_registered_msg(allFds, userNbr);
//std::cout << "connect client end\n";
//ft_putstr_fd(allFds.userData[userNbr].fd, ":irc.local NOTICE kinou :*** Could not resolve your hostname: Request timed out; using your IP address (172.17.0.1) instead.\nirc.local 376 kinou :End of message of the day.");
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:28:38 by apommier #+# #+# */
/* Updated: 2023/03/10 22:20:28 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:28:37 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -35,15 +35,9 @@ void NICK(std::string buffer, fdList &allFds, int userNbr)
cmd_error(allFds, allFds.userData[userNbr].fd, "433 * " + splitBuff[1] + " :Nickname is already in use\r\n");
return ;
}
//if nickname ok then (another user has it? )
//ERR_NONICKNAMEGIVEN
allFds.userData[userNbr].nickname = splitBuff[1];
if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty() /*&& !allFds.userData[userNbr].password.empty()*/)
{
if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty())
connect_client(allFds, userNbr);
// allFds.userData[userNbr].registered = 1;
// print_registered_msg(allFds, userNbr);
}
return ;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:40:42 by apommier #+# #+# */
/* Updated: 2023/03/10 22:21:05 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:28:47 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -29,21 +29,8 @@ void PASS(std::string buffer, fdList &allFds, int userNbr)
cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\r\n");
return ;
}
// if (splitBuff.size() != 2)
// {
// cmd_error(allFds, userNbr, "461 * PASS :Not enough parameters");
// //write(allFds.userData[userNbr].fd, "ERR_NEEDMOREPARAMS", 18);
// return ;
// }
password = buffer.substr(5, buffer.npos);
allFds.userData[userNbr].password = password;
if (!allFds.userData[userNbr].userName.empty() && !allFds.userData[userNbr].nickname.empty())
{
connect_client(allFds, userNbr);
// allFds.userData[userNbr].registered = 1;
// print_registered_msg(allFds, userNbr);
}
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:40:39 by apommier #+# #+# */
/* Updated: 2023/03/10 22:21:18 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:29:05 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -21,23 +21,16 @@ void USER(std::string buffer, fdList &allFds, int userNbr)
{
if (allFds.userData[userNbr].registered == 1)
{
// " + allFds.userData[userNbr].nickname + "
cmd_error(allFds, allFds.userData[userNbr].fd, "462 " + allFds.userData[userNbr].nickname + " USER :You may not reregister\r\n");
return ;
}
std::string realName = buffer.substr(buffer.find_first_of(":") + 1 , buffer.npos);
std::vector<std::string> splitBuff;
buffer.resize(buffer.size() - realName.size());
//std::cout << "Buffer in userNbr = ---" << buffer << "---" << std::endl;
//std::cout << "realname in userNbr = ---" << realName << "---" << std::endl;
split(buffer, ' ', splitBuff);
if (splitBuff.size() < 4)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "461 " + allFds.userData[userNbr].nickname + "USER :Not enough parameters\r\n");
//write(allFds.userData[userNbr].fd, "ERR_NEEDMOREPARAMS", 18);
return ;
}
allFds.userData[userNbr].userName = splitBuff[1];
@ -45,10 +38,6 @@ void USER(std::string buffer, fdList &allFds, int userNbr)
allFds.userData[userNbr].serverName = splitBuff[3];
allFds.userData[userNbr].realName = realName;
if (!allFds.userData[userNbr].nickname.empty() /*&& !allFds.userData[userNbr].password.empty()*/)
{
if (!allFds.userData[userNbr].nickname.empty())
connect_client(allFds, userNbr);
// allFds.userData[userNbr].registered = 1;
// print_registered_msg(allFds, userNbr);
}
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/09 17:21:57 by apommier #+# #+# */
/* Updated: 2023/03/13 01:12:07 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:29:41 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -16,18 +16,15 @@ 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);
}
@ -35,37 +32,18 @@ int is_joined(fdList &allFds, std::string chanName, int userNbr)
{
std::vector<channelData*>::iterator start = allFds.userData[userNbr].joinedChan.begin();
std::vector<channelData*>::iterator pastEnd = allFds.userData[userNbr].joinedChan.end();
//std::cout << "name1= ---" << chanName << "---\n";
while (start != pastEnd)
{
//std::cout << "result in find chan = " << pastEnd - start << std::endl;
//std::cout << "test is joined= " << allFds.userData[userNbr].joinedChan[pastEnd - start - 1]->name << "---\n";
if (allFds.userData[userNbr].joinedChan[pastEnd - start - 1]->name == chanName)
return (pastEnd - start - 1);
start++;
}
//std::cout << "chan not found in is joined\n";
return (-1);
}
int find_channel(fdList &allFds, std::string chanName)//return channel nbr
{
// std::_List_iterator<channelData> start = allFds.channelList.begin();
// std::_List_iterator<channelData> pastEnd = allFds.channelList.end();
// //std::cout << "name1= ---" << chanName << "---\n";
// while (start != pastEnd)
// {
// //std::cout << "chan = ---" << allFds.channelList[pastEnd - start - 1].name << "---" << std::endl;
// //std::cout << "test = " << allFds.channelList[pastEnd - start - 1].name << "---\n";
// if (allFds.channelList[pastEnd - start - 1].name == chanName)
// return (pastEnd - start - 1);
// start++;
// }
// //std::cout << "chan not found in find \n";
// return (-1);
int size = allFds.channelList.size();
for (int i = 0; i < size; i++)
{
@ -77,20 +55,6 @@ int find_channel(fdList &allFds, std::string chanName)//return channel nbr
int find_user(fdList &allFds, std::string userName)//return direct user fd
{
// std::_List_iterator<clientData> start = allFds.userData.begin();
// std::_List_iterator<clientData> pastEnd = allFds.userData.end();
// //std::cout << "name1= ---" << userName << "---\n";
// while (start != pastEnd)
// {
// //std::cout << "result in find user = " << pastEnd - start << std::endl;
// //std::cout << "name2= ---" << allFds.userData[pastEnd - start - 1].nickname << "---\n";
// if (allFds.userData[pastEnd - start - 1].nickname == userName)
// return (pastEnd - start - 1);
// start++;
// }
// //std::cout << "user not found\n";
// return (-1);
int size = allFds.userData.size();
for (int i = 0; i < size; i++)
{
@ -120,21 +84,3 @@ int is_in_same(fdList &allFds, int userNbr, int userNbr2)
}
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);
// }

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/09 15:40:33 by apommier #+# #+# */
/* Updated: 2023/03/13 08:56:33 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:30:39 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -77,7 +77,6 @@ void join_or_create(std::string buffer, fdList &allFds, int userNbr)
channelData joined_chan;
std::vector<std::string> splitBuff;
//std::cout << "JOINORCREATE\n";
split(buffer, ' ', splitBuff);
chanNbr = find_channel(allFds, splitBuff[1]);
if (chanNbr != -1) //chan already exist
@ -86,52 +85,33 @@ void join_or_create(std::string buffer, fdList &allFds, int userNbr)
return ;
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList[chanNbr]); //add chan in user data
allFds.channelList[chanNbr].userList.push_back(&allFds.userData[userNbr]);//add user in chan data
//allFds.channelList[chanNbr].size()++;
joined_chan = *(allFds.userData[userNbr].joinedChan.back());
if ((invitedUser = find_client_list(allFds.channelList[chanNbr].invitedList, &allFds.userData[userNbr])) != -1)
allFds.channelList[chanNbr].invitedList.erase(allFds.channelList[chanNbr].invitedList.begin() + invitedUser);
}
else //chan doesn't exist yet
{
//std::cout << "new chan\n";
channelData tmp_chan;
allFds.channelList.push_back(tmp_chan);
channelData &new_chan = allFds.channelList[allFds.channelList.size() - 1];
if (splitBuff[1][0] != '#' && splitBuff[1][0] != '&')
cmd_error(allFds, allFds.userData[userNbr].fd, "476 " + allFds.userData[userNbr].nickname + " " + splitBuff[1] + " :Bad Channel Mask\r\n");
//new_chan.nbrUser = 1;
new_chan.name = splitBuff[1];
new_chan.opList.push_back(&allFds.userData[userNbr]);
new_chan.userList.push_back(&allFds.userData[userNbr]);
//new_chan.List.push_back(&allFds.userData[userNbr]);
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList.back());//add chan in user data
joined_chan = allFds.channelList[allFds.channelList.size() - 1];
}
// :kinou3!kinou@172.17.0.1 JOIN :#test //done!
std::string fullMsg;
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " JOIN :" + joined_chan.name + "\r\n";
for (size_t i = 0; i < joined_chan.userList.size(); i++)
{
send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
//std::cout << "loop here\n";
}
std::cout << "size uselist=" << joined_chan.userList.size() << std::endl;
names_reply(allFds, joined_chan, allFds.userData[userNbr].fd, userNbr);
// :irc.local 353 kinou3 = #test :@kinou3
// :irc.local 366 kinou3 #test :End of /NAMES list.
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 + "\r\n");
//else
// cmd_error(allFds, allFds.userData[userNbr].fd, "NOTICE 331 TOPIC " + allFds.channelList[chanNbr].name + " :No topic is set\n");
// if (chanNbr == -1)
// {
// }
}
@ -143,8 +123,6 @@ void join_loop(fdList &allFds, std::vector<std::string> splitBuff, int userNbr)
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")
@ -152,18 +130,12 @@ void join_loop(fdList &allFds, std::vector<std::string> splitBuff, int userNbr)
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 " + allFds.userData[userNbr].nickname + " JOIN " + splitChan[i] + " :Bad Channel Mask\r\n";
cmd_error(allFds, allFds.userData[userNbr].fd, buffer);
//:Bad Channel Mask
//std::cout << "bad chan mask\n";
return ;
}
if (i < splitPwd.size())
@ -171,9 +143,7 @@ void join_loop(fdList &allFds, std::vector<std::string> splitBuff, int userNbr)
else
buffer = "JOIN " + splitChan[i];
join_or_create(buffer, allFds, userNbr);
//std::cout << "i= " << i << " ==========join loop3========\n";
}
//std::cout << "==========join loop3========\n";
}
@ -183,7 +153,6 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
{
std::vector<std::string> splitBuff;
std::string msg;
//std::cout << "==========join start========\n";
std::cout << "userNbr= " << userNbr << std::endl;
if (!allFds.userData[userNbr].registered)
@ -194,13 +163,8 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
split(buffer, ' ', splitBuff);
if (splitBuff.size() < 2)
{
/*change error*/
//std::cout << "JOIN : need more param\n";
cmd_error(allFds, allFds.userData[userNbr].fd, "461 " + allFds.userData[userNbr].nickname + " JOIN :Not enough parameters\r\n"); //ERR_NEEDMOREPARAMS
return ;
}
join_loop(allFds, splitBuff, userNbr);
//if (splitBuff[1].find(' ') != std::string::npos || splitBuff[1].find(7) != std::string::npos)
//send 352 and 315 or 353 and 366 (WHO or NAME)
}

View File

@ -6,31 +6,20 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/18 00:50:51 by apommier #+# #+# */
/* Updated: 2023/03/13 02:39:00 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:31:44 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)
@ -66,14 +55,12 @@ void LIST(std::string buffer, fdList &allFds, int userNbr)
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

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/19 22:10:07 by apommier #+# #+# */
/* Updated: 2023/03/10 22:23:22 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:32:06 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -27,40 +27,20 @@ void leave_chan(fdList &allFds, std::string chan, int userNbr, std::string msg)
cmd_error(allFds, allFds.userData[userNbr].fd, "422 " + allFds.userData[userNbr].nickname + " " + chan + " :You're not on that channel\r\n");
return ;
}
//del_user_in_chan(&allFds.userData[userNbr], &allFds.channelList[chanPos]);
int pos = find_client_list(allFds.channelList[chanPos].userList, &allFds.userData[userNbr]);
allFds.channelList[chanPos].userList.erase(allFds.channelList[chanPos].userList.begin() + pos);
//allFds.channelList[chanPos].size()--;
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].ip + " PART :" + allFds.channelList[chanPos].name + "\n";
reply = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip;
if (!msg.empty())
reply += " PART " + allFds.channelList[chanPos].name + " " + msg + "\r\n";
else
reply += " PART :" + allFds.channelList[chanPos].name + "\r\n";
//:awd!kinou@172.17.0.1 PART :#test tcpdump
//:awd!kinou@127.0.0.1 PART :#test
//(void )msg;
// reply += " " + msg;
//else
// reply += "\n";
//std::cout << "leave msg=" << reply << std::endl;
send(allFds.userData[userNbr].fd, reply.c_str(), reply.size(), 0);
//allFds.channelList[chanPos].size()--;
for (size_t i = 0; i < allFds.channelList[chanPos].userList.size(); i++)
{
if (allFds.channelList[chanPos].userList[i]->mode.s)
send(allFds.channelList[chanPos].userList[i]->fd, reply.c_str(), reply.size(), 0);
//std::cout << "loop here\n";
}
//cmd_reply(allFds, allFds.userData[userNbr].fd, reply + "\n");
}
void PART(std::string buffer, fdList &allFds, int userNbr)

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 08:53:03 by apommier #+# #+# */
/* Updated: 2023/03/10 22:11:34 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:32:35 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -30,7 +30,6 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
cmd_error(allFds, allFds.userData[userNbr].fd, "451 " + allFds.userData[userNbr].nickname + " PRIVMSG :You have not registered\r\n");
return ;
}
//std::cout << "privmsg bufer= --" << buffer << std::endl;
split(buffer, ' ', splitBuff);
if (splitBuff.size() < 2)
{
@ -42,7 +41,6 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
cmd_error(allFds, allFds.userData[userNbr].fd, "412 " + allFds.userData[userNbr].nickname + " PRIVMSG :No text to send\r\n");
return ;
}
//std::cout << "privmsg =" << msg << std::endl;
std::vector<std::string> dest;
split(splitBuff[1], ',', dest);
for (size_t i = 0; i < dest.size(); i++)
@ -68,10 +66,6 @@ void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
cmd_error(allFds, allFds.userData[userNbr].fd, "442 " + allFds.userData[userNbr].nickname + " PRIVMSG " + dest + " :You're not on that channel\r\n");
return ;
}
// if (find_client_list(allFds.channelList[pos].verboseList, &allFds.userData[userNbr]) != -1)
// {
// allFds.channelList[pos].verboseList.erase();
// }
if (allFds.channelList[pos].mode.m && !allFds.userData[userNbr].op
&& !is_chan_op(allFds, &allFds.channelList[pos], userNbr)
&& find_client_list(allFds.channelList[pos].verboseList, &allFds.userData[userNbr]) == -1)
@ -81,19 +75,12 @@ void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
}
for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++)
{
//std::cout << "send nickname " << allFds.channelList[pos].userList[i]->nickname << std::endl;
if (&allFds.userData[userNbr] != allFds.channelList[pos].userList[i] && allFds.channelList[pos].userList[i]->mode.s)
{
//std::cout << "send msg to user nbr" << i << std::endl;
send(allFds.channelList[pos].userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
}
//std::cout << "loop here\n";
}
return ;
}
pos = find_user(allFds, dest); //return direct user fd
//std::cout << "pos of user = " << pos << std::endl;
pos = find_user(allFds, dest);
if (pos == -1)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "401 " + allFds.userData[userNbr].nickname + " PRIVMSG " + dest + " :No such nick\r\n");
@ -101,6 +88,4 @@ void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
}
if (allFds.userData[pos].mode.s)
send(allFds.userData[pos].fd, fullMsg.c_str(), fullMsg.size(), 0);
//std::cout << "msg send\n";
//std::cout << "msg = " << fullMsg << std::endl;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:19:56 by apommier #+# #+# */
/* Updated: 2023/03/10 22:24:11 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:32:44 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -54,11 +54,6 @@ void INVITE(std::string buffer, fdList &allFds, int userNbr)
cmd_error(allFds, allFds.userData[userNbr].fd, "443 " + allFds.userData[userNbr].nickname + " " + splitBuff[1] + " " + splitBuff[2] + " :is already on channel\r\n");
return ;
}
// if (is_joined(allFds, splitBuff[2], invitedNbr) != -1)
// {
// cmd_error(allFds, allFds.userData[userNbr].fd, "443 " + allFds.userData[userNbr].nickname + " " + splitBuff[1] + " " + splitBuff[2] + " :is already on channel\n");
// return ;
// }
if ((chanNbr = find_channel(allFds, splitBuff[2])) != -1)
{
chan = allFds.channelList[chanNbr];
@ -72,8 +67,6 @@ void INVITE(std::string buffer, fdList &allFds, int userNbr)
return ;
}
std::cout << "invite him !!!!" << splitBuff[1] << " to " << splitBuff[2] << std::endl;
//RPL_INVITING
//RPL_AWAY
chan.invitedList.push_back(&allFds.userData[invitedNbr]);//set authorization to join
msg = "341 " + allFds.userData[userNbr].nickname + " " + chan.name + " " + splitBuff[1] + "\r\n";
cmd_reply(allFds, allFds.userData[userNbr].fd, msg);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:19:32 by apommier #+# #+# */
/* Updated: 2023/03/10 22:12:00 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:32:52 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -70,22 +70,12 @@ void KICK(std::string buffer, fdList &allFds, int userNbr)
}
kickMsg = allFds.userData[userPos].nickname + " have been kicked by " + allFds.userData[userNbr].nickname + "\r\n";
PART("PART " + splitBuff[1] + " has been kicked by " + allFds.userData[userNbr].nickname, 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 (size_t i = 0; i < allFds.channelList[chanPos].userList.size(); i++)
{
if (allFds.channelList[chanPos].userList[i]->mode.s)
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 " + allFds.userData[userNbr].nickname + " " + splitBuff[1] + " :You're not channel operator\n");
// return ;
// }
return ;
}

View File

@ -5,8 +5,8 @@
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:19:30 by apommier #+# #+# */
/* Updated: 2023/03/13 10:37:01 by apommier ### ########.fr */
/* Created: 2023/02/11 19:19:30 by sadjigui #+# #+# */
/* Updated: 2023/03/13 16:35:17 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -25,17 +25,14 @@ void chan_opt_o(fdList &allFds, int userNbr, std::vector<std::string> opt, int c
if (opt.size() < 4)
{
//std::cout << "ERR_NEEDMOREPARAMS" << std::endl;
cmd_error(allFds, allFds.userData[userNbr].fd, "461 " + allFds.userData[userNbr].nickname + " MODE " + opt[0] + " :Not enough parameters\r\n");
return ;
}
if ((find_user(allFds, opt[3]) == -1))
{
//std::cout << "User :" << opt[3] << " not found" << std::endl;
cmd_error(allFds, allFds.userData[userNbr].fd, "401 " + allFds.userData[userNbr].nickname + " MODE " + opt[1] + " :No such nick\r\n");
return ;
}
//A voir
pos = find_client_list(allFds.channelList[chanNbr].opList, &allFds.userData[userNbr]) != -1;
if (pos == -1 && !allFds.userData[userNbr].op)
{
@ -47,13 +44,6 @@ void chan_opt_o(fdList &allFds, int userNbr, std::vector<std::string> opt, int c
else
allFds.channelList[chanNbr].opList.push_back(&allFds.userData[userNbr]);
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "o", sign);
//retour mode chan
return ;
// if (allFds.userData[userNbr].mode.o == true && sign == true)
// allFds.userData[find_user(allFds, opt[3])].mode.o = (sign = true) ? true : false;
// std::cout << "-------> " << opt[3] << std::endl;
}
void chan_opt_k(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr, bool sign)
@ -63,10 +53,8 @@ void chan_opt_k(fdList &allFds, int userNbr, std::vector<std::string> opt, int c
cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + " MODE " + opt[1] + " :You're not channel operator\n");
return ;
}
if (opt.size() < 4)
if (opt.size() < 3)
{
//std::cout << "ERR_NEEDMOREPARAMS" << std::endl;
//std::cout << "how to use it :/MODE <channel >+k <password>" << std::endl;
cmd_error(allFds, allFds.userData[userNbr].fd, "461 " + allFds.userData[userNbr].nickname + " MODE " + opt[0] + " :Not enough parameters\n");
return ;
}
@ -82,10 +70,6 @@ void chan_opt_k(fdList &allFds, int userNbr, std::vector<std::string> opt, int c
void chan_opt_v(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr, bool sign)
{
(void)userNbr;
(void)chanNbr;
(void)sign;
if (find_client_list(allFds.channelList[chanNbr].opList, &allFds.userData[userNbr]) < 0)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + " MODE " + opt[1] + " :You're not channel operator\n");
@ -123,20 +107,7 @@ void chan_opt_b(fdList &allFds, int userNbr, std::vector<std::string> opt, int c
int target_in_ban;
if (opt.size() == 3 && sign == true)
{
// if (ban.empty() == true)
// {
// std::cout << "Nobody was banned on this channel" << std::endl;
// return ;
// }
// for (long unsigned int i = 0; i < ban.size(); ++i)
// {
// std::cout << ban[i]->nickname << std::endl;
// }
ban_reply(allFds.channelList[chanNbr], allFds.userData[userNbr]);
}
if (opt.size() >= 4)
{
if (find_client_list(allFds.channelList[chanNbr].opList, &allFds.userData[userNbr]) < 0)
@ -148,14 +119,11 @@ void chan_opt_b(fdList &allFds, int userNbr, std::vector<std::string> opt, int c
for (size_t i = 0; i < name.size(); i++)
{
// std::cout << "===============>" << i << std::endl;
// std::cout << "===============>" << opt.size() << std::endl;
target_in_client = find_user(allFds, name[i]);
if (target_in_client == -1)
{
std::cout << "No user found" << std::endl;
cmd_error(allFds, allFds.userData[userNbr].fd, "401 " + allFds.userData[userNbr].nickname + " MODE " + name[i] + " :No such nick\n");
// return ;
}
target_in_ban = find_client_list(allFds.channelList[chanNbr].banList, &allFds.userData[target_in_client]);
@ -188,23 +156,15 @@ void chan_opt_b(fdList &allFds, int userNbr, std::vector<std::string> opt, int c
void do_chan_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int chanNbr /*, channel (string or direct reference or pointer but no copy)*/)
{
(void)allFds;
(void)userNbr;
bool sign = true;
// if (allFds.userData[userNbr].mode.o == false)
// {
// cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + opt[1] + " :You're not channel operator\n");
// return ;
// }
if (opt[2][0] == '-')
sign = false;
for (int i = 1; opt[2][i]; i++)
{
switch (opt[2][i])
{
case 'o': chan_opt_o(allFds, userNbr, opt, chanNbr, sign);//std::cout << "launching option: " << opt[2][i] << std::endl;
//chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "o", sign);
case 'o': chan_opt_o(allFds, userNbr, opt, chanNbr, sign);
break ;
case 'p': allFds.channelList[chanNbr].mode.p = (sign == true) ? true : false;
chan_mode_reply(allFds, allFds.channelList[chanNbr], userNbr, "p", sign);
@ -238,10 +198,6 @@ void do_chan_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int
default : std::cout << "Not launching option" << std::endl;
break ;
}
//mode_i()
//call option
//switch ? if forest? map container ? 2 tab (name and function pointer) ?
// opt_i(int signe (+ ou -), channel, user);
}
return;
}
@ -252,7 +208,6 @@ void do_user_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int
if (allFds.userData[userNbr].nickname != opt[1])
{
std::cout << "not the same user ! don't try to change someone else MODE you stupid bitch\n";
cmd_error(allFds, allFds.userData[userNbr].fd, "502 " + allFds.userData[userNbr].nickname + " MODE " + opt[1] + " :Cant change mode for other users\r\n");
return ;
}
@ -275,24 +230,17 @@ void do_user_opt(fdList &allFds, int userNbr, std::vector<std::string> opt, int
case 'o':
if (sign == true)
return ;
// if (allFds.userData[userNbr].mode.o == false)
// {
// cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + opt[1] + " :You're not channel operator\n");
// return ;
// }
allFds.userData[new_target].mode.o = (sign == true) ? true : false;
break ;
default: std::cout << "Default" << std::endl;
default:
break ;
}
}
std::cout << "mode w== " << allFds.userData[new_target].mode.w << std::endl;
return;
}
void MODE(std::string buffer, fdList &allFds, int userNbr)
{
(void)userNbr;
std::vector<std::string> splitBuff;
int pos;
@ -302,21 +250,17 @@ void MODE(std::string buffer, fdList &allFds, int userNbr)
cmd_error(allFds, allFds.userData[userNbr].fd, "461 " + allFds.userData[userNbr].nickname + " MODE " + splitBuff[0] + " :Not enough parameters\n");
return ;
}
if (splitBuff[1][0] == '#' || splitBuff[1][0] == '&') //splitbuff[1] always equal to <channel> or <nickname>
if (splitBuff[1][0] == '#' || splitBuff[1][0] == '&')
{
if ((pos = find_channel(allFds, splitBuff[1])) == -1) //if true chan doesn't exist
if ((pos = find_channel(allFds, splitBuff[1])) == -1)
{
std::cout << splitBuff[1] << ": No such channel" << std::endl;
cmd_error(allFds, allFds.userData[userNbr].fd, "403 " + allFds.userData[userNbr].nickname + " MODE " + splitBuff[1] + " :No such channel\n");
return ;
}//else
//verify_option(allFds, str, i); //needed?
// 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] != '+'))
{
if (splitBuff[2].size() > 2)
@ -331,10 +275,8 @@ void MODE(std::string buffer, fdList &allFds, int userNbr)
}
else
chan_reply(allFds.channelList[pos], allFds.userData[userNbr]);
//do_option one by one here (do_chan_opt)?
return ;
}
// pos = find_user(allFds, splitBuff[1]);
else if ((pos = find_user(allFds, splitBuff[1])) == -1)
{
std::cout << "user doesn't exist" << std::endl;
@ -356,6 +298,4 @@ void MODE(std::string buffer, fdList &allFds, int userNbr)
else
user_reply(allFds.userData[userNbr]);
}
//do_option one by one here (do_user_opt)?
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:19:52 by apommier #+# #+# */
/* Updated: 2023/03/10 22:25:05 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:35:41 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -18,7 +18,6 @@ void TOPIC(std::string buffer, fdList &allFds, int userNbr)
int chanNbr;
std::vector<std::string> splitBuff;
std::cout << "topic im here1\n";//RPL_NOTOPIC //RPL_TOPIC
if (!allFds.userData[userNbr].registered)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "451 " + allFds.userData[userNbr].nickname + " TOPIC :You have not registered\r\n");
@ -44,12 +43,6 @@ void TOPIC(std::string buffer, fdList &allFds, int userNbr)
return ;
}
}
// else if (!allFds.userData[userNbr].op && !allFds.userData[userNbr].op)
// {
// cmd_error(allFds, allFds.userData[userNbr].fd, "482 " + allFds.userData[userNbr].nickname + " " + 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())
@ -57,14 +50,12 @@ void TOPIC(std::string buffer, fdList &allFds, int userNbr)
else
cmd_error(allFds, allFds.userData[userNbr].fd, "331 TOPIC " + splitBuff[1] + " :No topic is set\r\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 + "\r\n");
//std::cout << "PRINT TOPIC here topic set\n";//RPL_NOTOPIC //RPL_TOPIC
for (size_t i = 0; i < allFds.channelList[chanNbr].userList.size(); i++)
cmd_reply(allFds, allFds.channelList[chanNbr].userList[i]->fd, "332 TOPIC " + splitBuff[1] + " :" + allFds.channelList[chanNbr].topic + "\r\n");
}
return ;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/03/09 00:13:32 by apommier #+# #+# */
/* Updated: 2023/03/13 10:23:05 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:36:06 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -64,22 +64,11 @@ void chan_reply(channelData &chan, clientData &user)
void chan_mode_reply(fdList &allFds, channelData &chan, int userNbr, std::string mode, int sign)
{
//userNbr = asking client
//client = changed mode client
//:kinou3!kinou@172.17.0.1 MODE #test +o :kinou1
//:kinou3!kinou@172.17.0.1 MODE #test :+p
//kinou3 = baseop
//kinou1 = newOP
std::string reply = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName
std::string reply;
std::string base_reply = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName
+ "@" + allFds.userData[userNbr].ip + " MODE " + chan.name;// + " :+" + mode + "\r\n";
//if (sign)
// reply += " +";
//else
// reply += " -";
if (sign)
if (sign && contain_any(mode, "olbvk"))
{
reply += " +";
if (mode == "o")
@ -93,16 +82,20 @@ void chan_mode_reply(fdList &allFds, channelData &chan, int userNbr, std::string
else if (mode == "k")
reply += mode + " :" + chan.password;
}
else if (mode == "o")
else if (contain_any(mode, "obv"))
{
if (mode == "o")
reply += " -" + mode + " :" + chan.verboseList.back()->nickname;
else if (mode == "b")
reply += " -" + mode + " :" + chan.verboseList.back()->nickname;
else if (mode == "v")
reply += " -" + mode + " :" + chan.verboseList.back()->nickname;
}
else if (sign)
reply += " :+" + mode;
else
reply += " :-" + mode;
reply = base_reply + reply;
reply += "\r\n";
std::cout << "reply=" << reply << std::endl;
for (size_t i = 0; i < chan.userList.size(); i++)
@ -110,27 +103,17 @@ void chan_mode_reply(fdList &allFds, channelData &chan, int userNbr, std::string
std::cout << "i=" << i << std::endl;
send(chan.userList[i]->fd, reply.c_str(), reply.size(), 0);
}
//send(allFds.userData[userNbr].fd, reply.c_str(), reply.size(), 0);
//void user_reply(clientData &user)
}
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 + "\r\n";
send(allFds.userData[userNbr].fd, reply.c_str(), reply.size(), 0);
//void user_reply(clientData &user)
}
void user_reply(clientData &user)
{
//:irc.server.com 221 ClientName +ix
//std::string reply;
//std::string reply = " +";
//:kinou1!kinou@127.0.0.1 MODE kinou1 :+i
std::string reply = ":irc.local 221 " + user.nickname + " +";
if (user.mode.i)
reply += 'i';
@ -143,12 +126,10 @@ void user_reply(clientData &user)
reply += "\r\n";
std::cout << reply;
send(user.fd, reply.c_str(), reply.size(), 0);
//cmd_reply(allFds, user.fd, reply);
}
int search_and_erase(std::string &str, std::string toFind)
{
// std::vector<string>::iterator i = str.begin;
int i = 1; //1 instead of 0 to skip +/-
while (str[i] != 0)
{

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/10 15:46:10 by apommier #+# #+# */
/* Updated: 2023/02/13 18:22:37 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:38:37 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -29,10 +29,14 @@ void split_but_keep(std::string const &str, const char delim, std::vector<std::s
size_t start;
size_t end = 0;
if (str.find_first_of(delim, end) == std::string::npos)
{
out.push_back(str);
return ;
}
while ((start = str.find_first_not_of(delim, end)) != std::string::npos)
{
end = str.find(delim, start); //find end of string
out.push_back(str.substr(start, end + 1 - start)); //here
//std::cout << "split test = ---" << str.substr(start, end + 1 - start) << "---\n";
end = str.find(delim, start);
out.push_back(str.substr(start, end + 1 - start));
}
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/15 16:34:57 by apommier #+# #+# */
/* Updated: 2023/03/10 22:14:02 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:36:13 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -44,7 +44,6 @@ void KILL(std::string buffer, fdList &allFds, int userNbr)
msg = "connection killed by " + allFds.userData[userNbr].nickname + " " + buffer.substr(buffer.find_first_of(':'), std::string::npos);
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\r\n";
send(allFds.userData[pos].fd, fullMsg.c_str(), fullMsg.size(), 0);
//send_notice_msg(allFds, allFds.userData[userNbr].fd, userNbr)
delete_user(allFds, pos);
return ;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:04:47 by apommier #+# #+# */
/* Updated: 2023/03/13 06:06:11 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:36:20 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -28,7 +28,6 @@ void OPER(std::string buffer, fdList &allFds, int userNbr)
cmd_error(allFds, allFds.userData[userNbr].fd, "461 " + allFds.userData[userNbr].nickname + " OPER :Not enough parameters\r\n");
return ;
}
//:irc.local 491 kinou2
if (splitBuff[1] != OP_NAME)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "491 " + allFds.userData[userNbr].nickname + " :Invalid oper credentials\r\n");
@ -39,12 +38,6 @@ void OPER(std::string buffer, fdList &allFds, int userNbr)
cmd_error(allFds, allFds.userData[userNbr].fd, "464 " + allFds.userData[userNbr].nickname + " :Password incorrect\r\n");
return ;
}
// pos = find_user(allFds, splitBuff[1]);
// if (pos != -1)
// {
// cmd_error(allFds, allFds.userData[userNbr].fd, "401 " + allFds.userData[userNbr].nickname + " SQUIT " + splitBuff[1] + " :No such nick/channel\n");
// return ;
// }
allFds.userData[userNbr].op = 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";

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:11:03 by apommier #+# #+# */
/* Updated: 2023/03/10 22:15:48 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:36:38 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -16,10 +16,6 @@
void SQUIT(std::string buffer, fdList &allFds, int userNbr)
{
// (void)buffer;
// (void)allFds;
// (void)userNbr;
std::cout << "squit | server end\n";
std::vector<std::string> splitBuff;
split(buffer, ' ', splitBuff);
@ -38,7 +34,6 @@ void SQUIT(std::string buffer, fdList &allFds, int userNbr)
cmd_error(allFds, allFds.userData[userNbr].fd, "481 " + allFds.userData[userNbr].nickname + " :Permission Denied- You're not an IRC operator\r\n");
return ;
}
std::cout << "squit serv= " << splitBuff[2] << std::endl;
if (splitBuff[1] != "irc.local")
{
cmd_error(allFds, allFds.userData[userNbr].fd, "402 " + allFds.userData[userNbr].nickname + " " + splitBuff[2] + " :No such server\r\n");
@ -48,7 +43,6 @@ void SQUIT(std::string buffer, fdList &allFds, int userNbr)
for (int pos = 0; pos < allFds.nbrUser; pos++)
{
fullMsg = ":irc.local NOTICE " + allFds.userData[pos].userName + "." + allFds.userData[pos].nickname + " :*** You have been disconnected from the server\r\n";
//fullMsg = ":" + allFds.userData[pos].nickname + "!" + + "@" + allFds.userData[pos].ip + " QUIT :Server shutdown\n";
send(allFds.userData[pos].fd, fullMsg.c_str(), fullMsg.size(), 0);
if (close(allFds.userData[pos].fd) != 0)
ft_error("close() error");
@ -59,12 +53,5 @@ void SQUIT(std::string buffer, fdList &allFds, int userNbr)
if (close(allFds.epollFd) != 0)
ft_error("close() error");
allFds.alive = 0;
// if (allFds.userData[userNbr].op)
// allFds.alive = 0;
// else
// {
// std::cout << "Not op but okay i'll do it\n";
// allFds.alive = 0;
// }
return ;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/16 17:09:38 by apommier #+# #+# */
/* Updated: 2023/03/10 22:16:06 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:36:47 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -18,7 +18,6 @@ void WALLOPS(std::string buffer, fdList &allFds, int userNbr)
std::vector<std::string> splitBuff;
std::string msg;
//std::cout << "privmsg bufer= --" << buffer << std::endl;
if (!allFds.userData[userNbr].registered)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "451 " + allFds.userData[userNbr].nickname + " WALLOPS :You have not registered\r\n");
@ -31,11 +30,9 @@ void WALLOPS(std::string buffer, fdList &allFds, int userNbr)
return ;
}
msg = ":" + allFds.userData[userNbr].nickname + " WALLOPS :" + buffer.substr(splitBuff[1].size() + std::string::npos + 1) + "\r\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);
}
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/16 18:14:15 by apommier #+# #+# */
/* Updated: 2023/03/13 10:24:43 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:37:30 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -17,27 +17,26 @@
void names_reply(fdList &allFds, channelData &chan, int fd, int userNbr)
{
//:irc.local 353 kinou3 = #test :@kinou3
std::string msg;
print_client_list(chan.opList);
print_client_list(chan.verboseList);
msg = "353 " + allFds.userData[userNbr].nickname + " = " + chan.name + " :";
for (size_t i = 0; i < chan.userList.size(); i++)
{
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*/)
if (chan.userList[i]->mode.i && !is_in_same(allFds, userNbr, find_user(allFds, chan.userList[i]->nickname) && !allFds.userData[userNbr].op))
;
else if (find_client_list(chan.opList, chan.userList[i]) != -1 || allFds.userData[userNbr].op)//(chan.userList[i]->mode.o)//ischanop
else if (find_client_list(chan.opList, chan.userList[i]) != -1 || allFds.userData[userNbr].op)
{
std::cout << "he is op!!!\n";
msg += "@" + chan.userList[i]->nickname + " ";
}
else if (find_client_list(chan.verboseList, chan.userList[i]) != -1)//(chan.userList[i]->mode.v)//verbose
else if (find_client_list(chan.verboseList, chan.userList[i]) != -1)
{
std::cout << "he is verbose???\n";
msg += "+" + chan.userList[i]->nickname + " ";
}
else
msg += /*"=" +*/ chan.userList[i]->nickname + " ";
msg += chan.userList[i]->nickname + " ";
}
msg += "\r\n";
std::cout << "name msg= " << msg;
@ -54,15 +53,7 @@ void names_loop(fdList &allFds, std::vector<std::string> splitBuff, int userNbr)
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)
@ -79,7 +70,6 @@ void names_loop(fdList &allFds, std::vector<std::string> splitBuff, int userNbr)
void NAMES(std::string buffer, fdList &allFds, int userNbr)
{
std::vector<std::string> splitBuff;
//int pos;
if (!allFds.userData[userNbr].registered)
{
@ -93,24 +83,11 @@ void NAMES(std::string buffer, fdList &allFds, int userNbr)
{
if ((!allFds.channelList[i].mode.p && !allFds.channelList[i].mode.s)
|| is_joined(allFds, allFds.channelList[i].name, userNbr) || allFds.userData[userNbr].op)
{
names_reply(allFds, allFds.channelList[i], allFds.userData[userNbr].fd, userNbr);
//print who
}
}
return ;
}
else
names_loop(allFds, splitBuff, userNbr);
// if ((pos = find_channel(allFds, splitBuff[1])) != -1)
// {
// if ((!allFds.channelList[pos].mode.p && !allFds.channelList[pos].mode.s)
// || is_joined(allFds, allFds.channelList[pos].name, userNbr))
// {
// names_reply(allFds, allFds.channelList[pos], allFds.userData[userNbr].fd, allFds.userData[userNbr].nickname);
// }
// return; //??
// }
return ;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/13 00:16:27 by apommier #+# #+# */
/* Updated: 2023/03/10 22:16:50 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:37:45 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -29,14 +29,7 @@ void PONG(std::string buffer, fdList &allFds, int userNbr)
std::vector<std::string> splitBuff;
split(buffer, ' ', splitBuff);
msg = ":irc.local PONG irc.local :irc.local\r\n";
// ":irc.local PONG irc.local :irc.local"
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
// if (splitBuff.size() < 2)
// {
// cmd_error(allFds, allFds.userData[userNbr].fd, "431 " + allFds.userData[userNbr].nickname + " NICK :No nickname given\n");
// //write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
// return ;
// }
return ;
}
@ -52,18 +45,6 @@ void PING(std::string buffer, fdList &allFds, int userNbr)
std::vector<std::string> splitBuff;
split(buffer, ' ', splitBuff);
msg = ":irc.local PONG irc.local :" + splitBuff[1] + "\r\n";
//msg = "PONG irc.local " + splitBuff[1];
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
//std::cout << "pong send\n";
//std::cout << "/r = " << (int)'\r' << "\n";
//std::cout << "/n = " << (int)'\n' << "\n";
//std::cout << "msg=" << msg << "\n";
// if (splitBuff.size() < 2)
// {
// cmd_error(allFds, allFds.userData[userNbr].fd, "431 " + allFds.userData[userNbr].nickname + " NICK :No nickname given\n");
// //write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
// return ;
// }
return ;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:10:26 by apommier #+# #+# */
/* Updated: 2023/03/10 22:16:59 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:38:01 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -16,26 +16,16 @@ void send_quit_msg(fdList &allFds, int userNbr, std::string msg)
{
std::string fullMsg;
// if (msg.empty())
// fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " QUIT :" + joined_chan.name + "\n";
// else
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " QUIT :" + msg + "\r\n";
for (size_t i = 0; i < allFds.userData[userNbr].joinedChan.size(); i++)
{
//allFds.userData[userNbr].joinedChan[i]->
//send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
for (size_t j = 0; j < allFds.userData[userNbr].joinedChan[i]->userList.size(); j++)
{
//std::cout << "send nickname " << allFds.userData[userNbr].joinedChan[i]->userList[j]->nickname << std::endl;
if (allFds.userData[userNbr].joinedChan[i]->userList[j] != &allFds.userData[userNbr])
{
if (allFds.userData[userNbr].joinedChan[i]->userList[j]->mode.s)
send(allFds.userData[userNbr].joinedChan[i]->userList[j]->fd, fullMsg.c_str(), fullMsg.size(), 0);
}
//else
// std::cout << "hehe je quitte\n";
//std::cout << "loop here\n";
}
}
}
@ -46,11 +36,7 @@ void QUIT(std::string buffer, fdList &allFds, int userNbr)
split(buffer, ' ', splitBuff);
if (splitBuff.size() > 2)
{
send_quit_msg(allFds, userNbr, buffer.substr(5, std::string::npos));//to test
//print message?
//:kinou2!kinou@172.17.0.1 QUIT :Quit: leaving
}
else
send_quit_msg(allFds, userNbr, allFds.userData[userNbr].nickname);
delete_user(allFds, userNbr);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/16 18:14:17 by apommier #+# #+# */
/* Updated: 2023/03/13 04:57:33 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:38:26 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -15,22 +15,9 @@
//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 + " " */
msg = "352 "
+ user.userName + " "
+ user.hostName + " irc.local "
+ user.nickname + " :0 "
@ -56,10 +43,7 @@ void WHO(std::string buffer, fdList &allFds, int userNbr)
for (int i = 0; i < allFds.nbrUser; i++)
{
if (!allFds.userData[i].mode.i || is_in_same(allFds, userNbr, i) || allFds.userData[userNbr].op)
{
who_reply(allFds, allFds.userData[i], allFds.userData[userNbr].fd);
//print who
}
}
return ;
}
@ -69,11 +53,7 @@ void WHO(std::string buffer, fdList &allFds, int userNbr)
return ;
}
for (size_t i = 0; i < allFds.channelList[pos].userList.size(); 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 WHO list\n");
//std::cout <<
return ;
}

View File

@ -6,20 +6,12 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 22:01:25 by apommier #+# #+# */
/* Updated: 2023/03/09 05:38:19 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:39:13 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../includes/ft_irc.hpp"
std::string ft_test()
{
std::cout << "hehe je suis la" << std::endl;
return ("prout");
}
void parse_commands(std::string buffer, fdList &allFds, int userNbr)
{
//std::string cmd = buffer;
@ -29,37 +21,21 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr)
std::cout << "BUFFER: " << buffer;
int a = 0;
if (buffer.find(13) != std::string::npos) //change that pls
{
//std::cout << "pos of bitch= " << buffer.find(13) << std::endl;
//std::cout << "size= " << buffer.size() << std::endl;
//if (buffer.find(13) != buffer.size() - 2)
// std::cout << "BE CAREFUL CHAR 10 (line feed) not at end\n";
if (buffer.find(13) != std::string::npos)
buffer.erase(buffer.find(13), 1);
}
allFds.userData[userNbr].cmdBuffer += buffer;
if (allFds.userData[userNbr].cmdBuffer.find('\n') == std::string::npos)
return ;
allFds.userData[userNbr].cmdBuffer.erase(allFds.userData[userNbr].cmdBuffer.size() - 1);
split(allFds.userData[userNbr].cmdBuffer, ' ', splitBuff);
//std::cout << "before toupper: " << splitBuff[0] << std::endl;
for (size_t i = 0; i < splitBuff[0].size(); i++)
splitBuff[0][i] = toupper(splitBuff[0][i]);
//std::cout << "after toupper: " << splitBuff[0] << std::endl;
while (a < allFds.parsingTab.cmdNbr - 1 && splitBuff[0] != allFds.parsingTab.cmdName[a])
a++;
//std::cout << "after while \n";
if (a == allFds.parsingTab.cmdNbr - 1)
std::cout << "Command not found\n";
else
{
allFds.parsingTab.cmdPtr[a](allFds.userData[userNbr].cmdBuffer, allFds, userNbr);
//allFds.parsingTab.cmdPtr[a]
//JOIN(allFds.userData[userNbr].cmdBuffer, allFds, userNbr);
}
if (splitBuff[0] != "QUIT")
allFds.userData[userNbr].cmdBuffer.clear();
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/12 20:38:50 by apommier #+# #+# */
/* Updated: 2023/03/10 21:15:00 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:39:49 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -14,11 +14,7 @@
void del_user_in_chan(clientData *user, channelData *chan)
{
// size_t i;
int pos;
// for (i = 0; user != chan->userList[i]; i++)
// ;
// chan->userList.erase(chan->userList.begin() + i);
if ((pos = find_client_list(chan->userList, user)) != -1)
chan->userList.erase(chan->userList.begin() + pos);
@ -34,8 +30,6 @@ void del_user_in_chan(clientData *user, channelData *chan)
if ((pos = find_client_list(chan->opList, user)) != -1)
chan->opList.erase(chan->opList.begin() + pos);
//chan->nbrUser--;
}
void del_chan_in_user(clientData *user, channelData *chan)
@ -44,7 +38,6 @@ void del_chan_in_user(clientData *user, channelData *chan)
for (i = 0; chan != user->joinedChan[i]; i++)
;
user->joinedChan.erase(user->joinedChan.begin() + i);
//user->nbrUser--;
}
void delete_user(fdList &allFds, int userNbr)
@ -52,10 +45,7 @@ void delete_user(fdList &allFds, int userNbr)
std::cout << "Delete user nbr " << userNbr << std::endl;
for (size_t i = 0; i < allFds.channelList.size(); i++)//all joined chan
{
del_user_in_chan(&allFds.userData[userNbr], &allFds.channelList[i]);
//allFds.userData[userNbr].joinedChan[i].erase(find_user_in_chan(allFds.userData[userNbr].joinedChan[i])/*find user in chan*/)
}
close(allFds.userData[userNbr].fd);
allFds.userData.erase(allFds.userData.begin() + userNbr);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:33 by apommier #+# #+# */
/* Updated: 2023/03/03 22:57:10 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:39:59 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -16,7 +16,6 @@ int main(int ac, char **av)
{
if (!(ac == 3))
{
//ft_error("wrong number of arguments\nFORMAT: ./ircserv <port> <password>");
std::cout << "wrong number of arguments\nFORMAT: ./ircserv <port> <password>\n";
exit(1);
}
@ -25,10 +24,6 @@ int main(int ac, char **av)
{
initialize(av);
}
// catch()
// {
// std::cout << "Fatal error causing the end of the program :/\n";
// }
catch(std::exception &e)
{
if (errno)

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/09 22:26:27 by apommier #+# #+# */
/* Updated: 2023/03/11 20:36:50 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:42:13 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -19,42 +19,20 @@ void new_connection(fdList &allFds)
int newFd;
std::cout << "==========NEW CLIENT========\n";
//std::cout << "in new adress " << &allFds << std::endl;
//std::cout << "new connection !" << std::endl;
// if (MAX_EVENTS == allFds.nbrUser)
// {
// std::cout << "new connection refused, already full" << std::endl;
// return ;
// }
//int newUserFd;
//allFds.userFdList.push_back(newUserFd);
newFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
//protect accept
//allFds.userFdList[allFds.nbrUser] = newFd;
if (newFd == -1)
{
std::cout << "accept error: client connexion canceled\n";
return ;
}
allFds.userFdList.push_back(newFd);
//std::cout << "newConnection | old user fd = " << newFd << std::endl;
if (fcntl(newFd, F_SETFL, O_NONBLOCK) == -1)
ft_error("fctnl() error");
//std::cout << "fcntl return = " << newFd;
//close(newFd);
//std::cout << "newConnection | user fd = " << allFds.userFdList[allFds.nbrUser] << std::endl;
clientData newElement;
newElement.fd = newFd;
newElement.addr = addr;
newElement.ip = inet_ntoa(addr.sin_addr);
//newElement.op = 0;
allFds.userData.push_back(newElement);
//allFds.userData[allFds.nbrUser].fd = allFds.userFdList[allFds.nbrUser];
//std::cout << "newConnection | user in data fd = " << allFds.userData[allFds.nbrUser].fd << std::endl;
epoll_add(allFds.epollFd, allFds.userFdList[allFds.nbrUser]);
allFds.nbrUser++;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:58:13 by apommier #+# #+# */
/* Updated: 2023/02/16 23:01:04 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:42:42 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -14,49 +14,24 @@
void start_loop(fdList &allFds)
{
//bool alive = true;
//int readChar;
int eventNbr;
int i;
//int userId;
int nbr;
allFds.alive = 1;
//std::cout << "serverFd: " << allFds.serverFd << std::endl;
while (allFds.alive)
{
//std::cout << "---------start loop-----------\n";
//std::cout << "\n\n\nwhile alive event loop" << std::endl;
//std::cout << "in loop nbr user = " << allFds.nbrUser << std::endl;
eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 0);
//eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 5000);
//std::cout << "eventNbr = " << eventNbr << std::endl;
//std::cout << "eventNbr: " << eventNbr << std::endl;
//std::cout << "in loop adress " << &allFds << std::endl;
for (i = 0; i < eventNbr ; i++)
{
//std::cout << "event[i]'s fd: " << allFds.events[i].data.fd << std::endl;
//std::cout << "i= " << i << std::endl;
if (allFds.events[i].data.fd == allFds.serverFd)
{
new_connection(allFds);
//std::cout << "after new fd loop " << allFds.userData[i].fd << std::endl;
}
else
{
nbr = find(allFds.userFdList.begin(), allFds.userFdList.end(), allFds.events[i].data.fd) - allFds.userFdList.begin();
//if (!clientRequest(allFds, i))
// if (!clientRequest(allFds, nbr))
// alive = false;
clientRequest(allFds, nbr);
}
}
//std::cout << "---------end loop-----------\n";
}
std::cout << "dead server\n";

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:44:20 by apommier #+# #+# */
/* Updated: 2023/03/11 20:07:23 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:43:06 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -20,25 +20,16 @@
void initialize(char **av)
{
//int allFds.serverFd;
//int epollFd;
//int newSockFd = 0;
int opt = 1;
struct sockaddr_in addr;
//int addrLen = sizeof(addr);
fdList allFds;
//allFds.userData.reserve(MAX_EVENTS);
//allFds.channelList.reserve(MAX_CHAN);
allFds.nbrUser = 0;
allFds.password = av[2];
std::cout << "pass= " << av[2] << std::endl;
//allFds.nbrUser = 0;
allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0);
if (allFds.serverFd == -1)
ft_error("socket() error");
// if (setsockopt(allFds.serverFd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt)))
// ft_error("setsockopt() error");
if (setsockopt(allFds.serverFd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)))
ft_error("setsockopt() error");
@ -53,23 +44,10 @@ void initialize(char **av)
if (listen(allFds.serverFd, 10) == -1)
ft_error("listen() error");
// newSockFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
// if (newSockFd == -1)
// ft_error("accept() error");
// char buffer[1024];
// int nbrRead;
// while (strncmp("/quit", buffer, 5))
// {
// nbrRead = read()
// }
time_t timer;
time(&timer);
allFds.creation_date = ctime(&timer);
allFds.epollFd = epoll_start();
//allFds.userData
epoll_add(allFds.epollFd, allFds.serverFd);
start_loop(allFds);
//send(newSockFd, "hello", 5, 0);
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:46:41 by apommier #+# #+# */
/* Updated: 2023/03/13 08:32:00 by apommier ### ########.fr */
/* Updated: 2023/03/13 16:44:11 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -16,13 +16,6 @@ void ft_error(std::string str)
{
std::cerr << str << std::endl;
throw std::exception();
// if (errno)
// {
// std::cerr << "errno: " << strerror(errno) << std::endl;
// throw std::exception();
// //exit(errno);
// }
//exit(1);
}
void close_fd(int fd)
@ -33,29 +26,21 @@ void close_fd(int fd)
void ft_putstr_fd(int fd, std::string str)
{
// write(fd, str.c_str(), str.size());
// write(fd, "\n", 1);
str += "\r\n";
send(fd, str.c_str(), str.size(), 0);
}
void cmd_error(fdList &allFds, int fd, std::string error)
{
(void)allFds; //to delete
(void) allFds;
error = ":irc.local " + error;
//write(fd, ":irc.local ", 11);
//write(fd, error.c_str(), error.size());
send(fd, error.c_str(), error.size(), 0);
}
void cmd_reply(fdList &allFds, int fd, std::string error)
{
(void)allFds; //to delete
(void) allFds;
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);
}