Merge branch 'apommier' into sadjigui

This commit is contained in:
PrStein 2023-02-13 23:40:15 +01:00
commit 1319c01746
21 changed files with 290 additions and 118 deletions

View File

@ -6,7 +6,7 @@
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2022/12/01 17:27:29 by apommier #+# #+# #
# Updated: 2023/02/12 20:53:25 by apommier ### ########.fr #
# Updated: 2023/02/13 00:20:18 by apommier ### ########.fr #
# #
# **************************************************************************** #
@ -27,6 +27,7 @@ SRCS := main.cpp\
commands/auth/pass.cpp\
commands/auth/user.cpp\
commands/auth/auth_utils.cpp\
commands/auth/connect_client.cpp\
\
commands/channel/channel_utils.cpp\
commands/channel/join.cpp\
@ -34,6 +35,7 @@ SRCS := main.cpp\
\
commands/other/quit.cpp\
commands/other/squit.cpp\
commands/other/ping_pong.cpp\
\
commands/channel_op/invite.cpp\
commands/channel_op/kick.cpp\

View File

@ -6,13 +6,17 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:37 by apommier #+# #+# */
/* Updated: 2023/02/12 21:10:18 by apommier ### ########.fr */
/* Updated: 2023/02/13 19:48:40 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#pragma once
#include <sys/socket.h> //socket function
#include <netinet/in.h>//inet
#include <arpa/inet.h>
#include <cstdlib>
#include <cstring> //std::string
#include <cerrno> //errno
@ -85,7 +89,9 @@ struct clientData //each client have one
{
bool registered;
clientData() { registered = 0; }
struct sockaddr_in addr;
std::string ip;
std::string nickname;
std::string password;
@ -101,6 +107,8 @@ struct clientData //each client have one
int fd;
int op;
clientData() : registered(0), op(0) {}
// { registered = 0; op = 0;}
};
struct channelData //each chan have one
@ -157,6 +165,7 @@ void cmd_error(fdList &allFds, int userNbr, std::string error);
void ft_error(std::string str);
void close_fd(int fd);
int contain_any(std::string str, std::string toFind);
int not_contain_other(std::string str, std::string toFind);
/* ************************************************************************** */
/* *******************************AUTH UTILS********************************* */
@ -200,6 +209,7 @@ int epoll_start(); //2nd
void new_connection(fdList &allFds);
bool clientRequest(fdList &allFds, int userNbr);
void connect_client(fdList &allFds, int userNbr);
/* ************************************************************************** */
/* ***************************COMMANDS PARSING******************************* */

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */
/* Updated: 2023/02/12 21:40:10 by apommier ### ########.fr */
/* Updated: 2023/02/13 19:21:07 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -18,6 +18,7 @@ bool clientRequest(fdList &allFds, int userNbr)//,
char buf[1024] = {0};
std::string buffer;
size_t len = 1024;
int ret = 0;
//buf.reserve(1024);
//se demerder pour join quand pas \n
@ -27,9 +28,10 @@ bool clientRequest(fdList &allFds, int userNbr)//,
//std::cout << "client request!" << std::endl;
//if (recv(allFds.userData[userNbr].fd, buf, len, 0) == -1)
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
@ -42,6 +44,10 @@ bool clientRequest(fdList &allFds, int userNbr)//,
return (1);
}
std::cout << "BUFFER: ---" << buf << "---" << std::endl;
// for (int i = 0; buffer[i]; i++)
// {
// std::cout << i << " = " << (int)buffer[i] << std::endl;
// }
//split with \n and while (tab de split) -> parsing

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/07 14:45:45 by apommier #+# #+# */
/* Updated: 2023/02/11 10:40:42 by apommier ### ########.fr */
/* Updated: 2023/02/13 12:54:35 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -14,13 +14,41 @@
void print_registered_msg(fdList &allFds, int userNbr)
{
ft_putstr_fd(allFds.userData[userNbr].fd, "-------------------WELCOME TO MY PERSONNAL IRC SERVER!-------------------" );
ft_putstr_fd(allFds.userData[userNbr].fd, "your nickname is |" + allFds.userData[userNbr].nickname );
ft_putstr_fd(allFds.userData[userNbr].fd, "your password is |" + allFds.userData[userNbr].password );
ft_putstr_fd(allFds.userData[userNbr].fd, "your username is |" + allFds.userData[userNbr].userName );
ft_putstr_fd(allFds.userData[userNbr].fd, "your realname is |" + allFds.userData[userNbr].realName );
ft_putstr_fd(allFds.userData[userNbr].fd, "your hostname is |" + allFds.userData[userNbr].hostName );
ft_putstr_fd(allFds.userData[userNbr].fd, "your servername is |" + allFds.userData[userNbr].serverName );
(void)allFds;
(void)userNbr;
std::string msg;
msg = ":irc.local 001 " + allFds.userData[userNbr].nickname + " : Welcome to the Internet Relay Network " + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].hostName + "\n";
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
msg = ":irc.local 002 " + allFds.userData[userNbr].nickname + " : Your host is irc.local" + ", running version InspIRCd-3\n"; //+ allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].hostName;
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
msg = ":irc.local 003 " + allFds.userData[userNbr].nickname + " : This server was created " + "09:58:11 Feb 13 2023\n";//<date>;
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
msg = ":irc.local 004 " + allFds.userData[userNbr].nickname + "irc.local " + "InspIRCd-3 " + "iosw " + "biklmnopstv\n";
//<servername> <version> <available user modes> <available channel modes
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
// 001 RPL_WELCOME
// "Welcome to the Internet Relay Network
// <nick>!<user>@<host>"
// 002 RPL_YOURHOST
// "Your host is <servername>, running version <ver>"
// 003 RPL_CREATED
// "This server was created <date>"
// 004 RPL_MYINFO
// "<servername> <version> <available user modes>
// <available channel modes>"
// ft_putstr_fd(allFds.userData[userNbr].fd, "-------------------WELCOME TO MY PERSONNAL IRC SERVER!-------------------" );
// ft_putstr_fd(allFds.userData[userNbr].fd, "your nickname is |" + allFds.userData[userNbr].nickname );
// ft_putstr_fd(allFds.userData[userNbr].fd, "your password is |" + allFds.userData[userNbr].password );
// ft_putstr_fd(allFds.userData[userNbr].fd, "your username is |" + allFds.userData[userNbr].userName );
// ft_putstr_fd(allFds.userData[userNbr].fd, "your realname is |" + allFds.userData[userNbr].realName );
// ft_putstr_fd(allFds.userData[userNbr].fd, "your hostname is |" + allFds.userData[userNbr].hostName );
// ft_putstr_fd(allFds.userData[userNbr].fd, "your servername is |" + allFds.userData[userNbr].serverName );
}
// void delete_client(fdList &allFds)

View File

@ -0,0 +1,26 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* connect_client.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/12 23:30:11 by apommier #+# #+# */
/* Updated: 2023/02/13 11:04:52 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../../includes/ft_irc.hpp"
void connect_client(fdList &allFds, int userNbr)
{
// allFds.userData[userNbr].fd
std::cout << "connect client start\n";
// if (-1 == connect(allFds.userData[userNbr].fd, (struct sockaddr *)&allFds.userData[userNbr].addr, sizeof(allFds.userData[userNbr].addr)))
// ft_error("connect() error");
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/02/09 13:19:51 by apommier ### ########.fr */
/* Updated: 2023/02/12 23:37:37 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -31,8 +31,9 @@ void NICK(std::string buffer, fdList &allFds, int userNbr)
allFds.userData[userNbr].nickname = splitBuff[1];
if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty())
{
allFds.userData[userNbr].registered = 1;
print_registered_msg(allFds, userNbr);
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/02/09 13:20:00 by apommier ### ########.fr */
/* Updated: 2023/02/13 17:33:51 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -16,6 +16,12 @@ void PASS(std::string buffer, fdList &allFds, int userNbr)
{
std::string password;
if (allFds.userData[userNbr].registered)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\n");
return ;
}
if (buffer.size() < 6)// ---PASS ---
{
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * PASS :Not enough parameters\n");
@ -28,11 +34,7 @@ void PASS(std::string buffer, fdList &allFds, int userNbr)
// //write(allFds.userData[userNbr].fd, "ERR_NEEDMOREPARAMS", 18);
// return ;
// }
else if (allFds.userData[userNbr].registered)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\n");
return ;
}
password = buffer.substr(5, buffer.npos);
allFds.userData[userNbr].password = buffer;
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:40:39 by apommier #+# #+# */
/* Updated: 2023/02/12 16:26:48 by apommier ### ########.fr */
/* Updated: 2023/02/13 20:05:39 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -17,32 +17,6 @@
//ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
struct modeChan
{
bool o;
bool p;
bool s;
bool i;
bool t;
bool n;
bool m;
bool l;
bool b;
bool v;
bool k;
};
struct modeUser
{
bool i;
bool s;
bool w;
bool o;
};
void USER(std::string buffer, fdList &allFds, int userNbr)
{
if (allFds.userData[userNbr].registered == 1)
@ -72,7 +46,8 @@ void USER(std::string buffer, fdList &allFds, int userNbr)
allFds.userData[userNbr].realName = realName;
if (!allFds.userData[userNbr].nickname.empty())
{
allFds.userData[userNbr].registered = 1;
print_registered_msg(allFds, userNbr);
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/02/12 15:23:10 by apommier ### ########.fr */
/* Updated: 2023/02/13 17:45:33 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -16,11 +16,11 @@ 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";
//std::cout << "name1= ---" << chanName << "---\n";
while (start != pastEnd)
{
std::cout << "result in find chan = " << pastEnd - start << std::endl;
std::cout << "name2= ---" << allFds.channelList[pastEnd - start - 1].name << "---\n";
//std::cout << "result in find chan = " << pastEnd - start << 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++;

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/09 15:40:33 by apommier #+# #+# */
/* Updated: 2023/02/12 22:03:21 by apommier ### ########.fr */
/* Updated: 2023/02/13 20:21:28 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -69,17 +69,33 @@ int chan_check(fdList &allFds, int userNbr, int chanNbr, std::vector<std::string
return (1);
}
void JOIN(std::string buffer, fdList &allFds, int userNbr)
{
std::vector<std::string> splitBuff;
int chanNbr;
channelData joined_chan;
std::cout << "==========join start========\n";
std::cout << "userNbr= " << userNbr << std::endl;
if (!allFds.userData[userNbr].registered)
{
/*change error*/
cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not regestered\n"); //ERR_NEEDMOREPARAMS
cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not registered\n"); //ERR_NEEDMOREPARAMS
return ;
}
split(buffer, ' ', splitBuff);
@ -108,9 +124,7 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
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].nbrUser++;
//std::cout << "join2 nickname " << allFds.channelList.back().userList[0]->nickname << std::endl;
//std::cout << "join2 fd " << allFds.channelList.back().userList[0]->nickname << std::endl;
//message nickname joined the channel?
joined_chan = *(allFds.userData[userNbr].joinedChan.back());
}
else //chan doesn't exist yet
{
@ -121,11 +135,16 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
new_chan.nbrUser = 1;
new_chan.userList.push_back(&allFds.userData[userNbr]);
//new_chan.userList
joined_chan = new_chan;
allFds.channelList.push_back(new_chan);
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList.back());//add chan in user data
//std::cout << "join nickname " << allFds.channelList[0].userList[0]->nickname << std::endl;
//std::cout << "join fd " << allFds.channelList[0].userList[0]->fd << std::endl;
//message nickname created the channel?
}
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);
std::cout << "loop here\n";
}
//send 352 and 315 or 353 and 366 (WHO or NAME)
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 08:53:03 by apommier #+# #+# */
/* Updated: 2023/02/11 12:38:51 by apommier ### ########.fr */
/* Updated: 2023/02/13 20:28:11 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -18,6 +18,7 @@ void PRIVMSG(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() < 3)
{
@ -26,27 +27,36 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
return ;
}
for (size_t i = 2; i < splitBuff.size(); i++)
{
msg += (" " + splitBuff[i]);
}
// for (size_t i = 2; i < splitBuff.size(); i++)
// {
// msg += (" " + splitBuff[i]);
// }
//msg = buffer.substr(buffer.find(':') + 1, std::string::npos);
std::cout << "privmsg =" << msg << std::endl;
std::vector<std::string> dest;
split(splitBuff[1], ',', dest);
for (size_t i = 0; i < dest.size(); i++)
{
send_msg(allFds, msg, dest[i], userNbr);
// std::cout << "dest[i] =" << dest[i] << "|" << std::endl;
// std::cout << "dest[i] =" << dest[i] << "|" << std::endl;
// std::cout << "dest[i] =" << dest[i] << "|" << std::endl;
// std::cout << "chan =" << allFds.channelList[0].name << "|" << std::endl;
// std::cout << "chan =" << allFds.channelList[0].name << "|" << std::endl;
// std::cout << "chan =" << allFds.channelList[0].name << "|" << std::endl;
// std::cout << "result =" << (allFds.channelList[0].name == dest[i]) << "|" << std::endl;
send_msg(allFds, buffer, dest[i], userNbr);
}
}
void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
{
int fd;
int pos;
//find dest
std::string fullMsg;
fullMsg = "*" + allFds.userData[userNbr].nickname + "* " + msg;
fd = find_channel(allFds, dest); //return channel nbr
if (fd != -1)
//fullMsg = "*" + allFds.userData[userNbr].nickname + "* " + msg;
pos = find_channel(allFds, dest); //return channel nbr
if (pos != -1)
{
//std::vector<clientData *>::iterator start = allFds.channelList[fd].userList.begin();
//std::vector<clientData *>::iterator pastEnd = allFds.channelList[fd].userList.end();
@ -57,19 +67,23 @@ void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
// start++;
// std::cout << "loop here\n";
// }
for (size_t i = 0; i < allFds.channelList[fd].userList.size(); i++)
for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++)
{
std::cout << "send nickname " << allFds.channelList[fd].userList[i]->nickname << std::endl;
ft_putstr_fd(allFds.channelList[fd].userList[i]->fd, fullMsg);
std::cout << "send nickname " << allFds.channelList[pos].userList[i]->nickname << std::endl;
//ft_putstr_fd(allFds.channelList[fd].userList[i]->fd, fullMsg);
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\n";
//:kinou2!kinou@172.17.0.1 PRIVMSG #test :cc
//send(allFds.channelList[pos].userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
send(allFds.channelList[pos].userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
std::cout << "loop here\n";
}
return ;
}
fd = find_user(allFds, dest); //return direct user fd
if (fd != -1)
pos = find_user(allFds, dest); //return direct user fd
if (pos != -1)
{
ft_putstr_fd(fd, fullMsg);
ft_putstr_fd(pos, fullMsg);
return ;
}
std::cout << "error msg\n";

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/10 15:46:10 by apommier #+# #+# */
/* Updated: 2023/02/11 13:51:28 by apommier ### ########.fr */
/* Updated: 2023/02/13 18:22:37 by apommier ### ########.fr */
/* */
/* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/09 22:04:11 by apommier #+# #+# */
/* Updated: 2023/02/12 17:30:37 by apommier ### ########.fr */
/* Updated: 2023/02/13 16:32:24 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -171,21 +171,15 @@ void KILL(std::string buffer, fdList &allFds, int userNbr)
return ;
}
void PING(std::string buffer, fdList &allFds, int userNbr)
{
(void)buffer;
(void)allFds;
(void)userNbr;
return ;
}
// void PING(std::string buffer, fdList &allFds, int userNbr)
// {
// (void)buffer;
// (void)allFds;
// (void)userNbr;
// return ;
// }
void PONG(std::string buffer, fdList &allFds, int userNbr)
{
(void)buffer;
(void)allFds;
(void)userNbr;
return ;
}
void ERROR(std::string buffer, fdList &allFds, int userNbr)
{

View File

@ -0,0 +1,64 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ping_pong.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/13 00:16:27 by apommier #+# #+# */
/* Updated: 2023/02/13 22:54:14 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../../includes/ft_irc.hpp"
// void ft_putstr_fd(int fd, std::string str)
// {
// write(fd, str.c_str(), str.size());
// write(fd, "\n", 1);
// }
void PONG(std::string buffer, fdList &allFds, int userNbr)
{
(void)buffer;
(void)allFds;
(void)userNbr;
std::string msg;
std::vector<std::string> splitBuff;
split(buffer, ' ', splitBuff);
msg = ":irc.local PONG irc.local :irc.local";
// ":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 * NICK :No nickname given\n");
// //write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
// return ;
// }
return ;
}
void PING(std::string buffer, fdList &allFds, int userNbr)
{
(void)buffer;
(void)allFds;
(void)userNbr;
std::string msg;
std::vector<std::string> splitBuff;
split(buffer, ' ', splitBuff);
msg = ":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 * 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: 2022/12/06 22:01:25 by apommier #+# #+# */
/* Updated: 2023/02/12 16:19:20 by apommier ### ########.fr */
/* Updated: 2023/02/13 19:44:43 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -25,6 +25,17 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr)
std::vector<std::string> splitBuff;
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";
buffer.erase(buffer.find(13), 1);
}
allFds.userData[userNbr].cmdBuffer += buffer;
if (allFds.userData[userNbr].cmdBuffer.find('\n') == std::string::npos)
return ;
@ -39,8 +50,6 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr)
std::cout << "Command not found\n";
else
{
//std::cout << "Command name = " << allFds.parsingTab.cmdName[a] << std::endl;
//std::cout << "Command nbr = " << a << std::endl;
allFds.parsingTab.cmdPtr[a](allFds.userData[userNbr].cmdBuffer, allFds, userNbr);
//allFds.parsingTab.cmdPtr[a]
//JOIN(allFds.userData[userNbr].cmdBuffer, allFds, userNbr);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/12 20:38:50 by apommier #+# #+# */
/* Updated: 2023/02/12 20:39:10 by apommier ### ########.fr */
/* Updated: 2023/02/13 20:25:45 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -18,6 +18,7 @@ void del_user_in_chan(clientData *user, channelData *chan)
for (i = 0; user != chan->userList[i]; i++)
;
chan->userList.erase(chan->userList.begin() + i);
chan->nbrUser--;
}
void delete_user(fdList &allFds, int userNbr)

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:33 by apommier #+# #+# */
/* Updated: 2023/02/09 14:39:07 by apommier ### ########.fr */
/* Updated: 2023/02/12 22:35:11 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -15,7 +15,11 @@
int main(int ac, char **av)
{
if (!(ac == 3 || ac == 2))
ft_error("wrong number of arguments\nFORMAT: ./ircserv <port> <password>");
{
//ft_error("wrong number of arguments\nFORMAT: ./ircserv <port> <password>");
std::cout << "wrong number of arguments\nFORMAT: ./ircserv <port> <password>\n";
exit(1);
}
std::cout << "============Homemade IRC Server start============" << std::endl;
// try
// {

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/09 22:26:27 by apommier #+# #+# */
/* Updated: 2023/02/12 21:42:07 by apommier ### ########.fr */
/* Updated: 2023/02/13 19:46:41 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -44,7 +44,9 @@ void new_connection(fdList &allFds)
clientData newElement;
newElement.fd = newFd;
newElement.op = 0;
newElement.addr = addr;
newElement.ip = inet_ntoa(addr.sin_addr);
//newElement.op = 0;
allFds.userData.push_back(newElement);
//allFds.userData[allFds.nbrUser].fd = allFds.userList[allFds.nbrUser];
//std::cout << "newConnection | user in data fd = " << allFds.userData[allFds.nbrUser].fd << std::endl;

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:58:13 by apommier #+# #+# */
/* Updated: 2023/02/12 14:21:04 by apommier ### ########.fr */
/* Updated: 2023/02/13 16:47:16 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -26,10 +26,11 @@ void start_loop(fdList &allFds)
std::cout << "serverFd: " << allFds.serverFd << std::endl;
while (allFds.alive)
{
//std::cout << "loop" << std::endl;
//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, 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++)

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:44:20 by apommier #+# #+# */
/* Updated: 2023/02/12 15:00:19 by apommier ### ########.fr */
/* Updated: 2023/02/13 00:04:55 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -46,7 +46,7 @@ void initialize(char **av)
ft_error("wrong format for <port>\nneed to be an positive integer");
if (bind(allFds.serverFd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
ft_error("bind() error");
if (listen(allFds.serverFd, 100) == -1)
if (listen(allFds.serverFd, 10) == -1)
ft_error("listen() error");
// newSockFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:46:41 by apommier #+# #+# */
/* Updated: 2023/02/12 20:52:45 by apommier ### ########.fr */
/* Updated: 2023/02/13 10:52:07 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
@ -17,7 +17,7 @@ void ft_error(std::string str)
std::cerr << str << std::endl;
if (errno)
{
std::cerr << "errno: " << strerror(errno);
std::cerr << "errno: " << strerror(errno) << std::endl;
exit(errno);
}
exit(1);
@ -31,20 +31,24 @@ 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);
// write(fd, str.c_str(), str.size());
// write(fd, "\n", 1);
str += "\n";
send(fd, str.c_str(), str.size(), 0);
}
void cmd_error(fdList &allFds, int fd, std::string error)
{
(void)allFds; //to delete
write(fd, ":irc.local ", 11);
write(fd, error.c_str(), error.size());
error = ":irc.local " + 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)
{
for (int i = 0; toFind[i] != -1; i++)
for (int i = 0; toFind[i] != 0; i++)
{
if (str.find(toFind[i]) != std::string::npos)
return (1);
@ -52,6 +56,16 @@ int contain_any(std::string str, std::string toFind)
return (0);
}
int not_contain_other(std::string str, std::string toFind)
{
for (int i = 0; str[i] != 0; i++)
{
if (toFind.find(str[i]) == std::string::npos)
return (0);
}
return (1);
}
// void find_user_in_chan(fdList &allFds, channelData *chan)
// {