Merge branch 'apommier' into sadjigui

This commit is contained in:
PrStein 2023-02-15 17:21:17 +01:00
commit e3ac028167
22 changed files with 505 additions and 241 deletions

View File

@ -6,7 +6,7 @@
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ # # By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2022/12/01 17:27:29 by apommier #+# #+# # # Created: 2022/12/01 17:27:29 by apommier #+# #+# #
# Updated: 2023/02/13 00:20:18 by apommier ### ########.fr # # Updated: 2023/02/14 22:21:45 by apommier ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
@ -32,9 +32,9 @@ SRCS := main.cpp\
commands/channel/channel_utils.cpp\ commands/channel/channel_utils.cpp\
commands/channel/join.cpp\ commands/channel/join.cpp\
commands/channel/privmsg.cpp\ commands/channel/privmsg.cpp\
commands/channel/notice.cpp\
\ \
commands/other/quit.cpp\ commands/other/quit.cpp\
commands/other/squit.cpp\
commands/other/ping_pong.cpp\ commands/other/ping_pong.cpp\
\ \
commands/channel_op/invite.cpp\ commands/channel_op/invite.cpp\
@ -42,6 +42,7 @@ SRCS := main.cpp\
commands/channel_op/mode.cpp\ commands/channel_op/mode.cpp\
commands/channel_op/topic.cpp\ commands/channel_op/topic.cpp\
\ \
commands/operator/squit.cpp\
commands/operator/oper.cpp\ commands/operator/oper.cpp\
\ \
commands/not_done_cmd.cpp #special (temporary) commands/not_done_cmd.cpp #special (temporary)

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:37 by apommier #+# #+# */ /* Created: 2022/12/01 17:27:37 by apommier #+# #+# */
/* Updated: 2023/02/13 19:48:40 by apommier ### ########.fr */ /* Updated: 2023/02/15 00:16:02 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -18,6 +18,9 @@
#include <arpa/inet.h> #include <arpa/inet.h>
#include <cstdlib> #include <cstdlib>
#include <exception>
#include <ctime>
#include <cstring> //std::string #include <cstring> //std::string
#include <cerrno> //errno #include <cerrno> //errno
#include <iostream> //std::cout | cerr #include <iostream> //std::cout | cerr
@ -37,6 +40,14 @@
#define READ_SIZE 10 #define READ_SIZE 10
#define CMD_NBR 10 #define CMD_NBR 10
// if (!allFds.userData[userNbr].registered)
// {
// /*change error*/
// cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not registered\n"); //ERR_NEEDMOREPARAMS
// return ;
// }
/* ************************************************************************** */ /* ************************************************************************** */
/* *********************************STRUCT*********************************** */ /* *********************************STRUCT*********************************** */
/* ************************************************************************** */ /* ************************************************************************** */
@ -139,7 +150,8 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY
accessList<clientData> userData; accessList<clientData> userData;
int alive; int alive;
std::string password;
std::string creation_date;
int nbrUser; int nbrUser;
functionTab parsingTab; functionTab parsingTab;
}; };
@ -185,6 +197,7 @@ void split_but_keep(std::string const &str, const char delim, std::vector<std::s
/* *******************************CHAN UTILS********************************* */ /* *******************************CHAN UTILS********************************* */
/* ************************************************************************** */ /* ************************************************************************** */
int is_joined(fdList &allFds, std::string chanName, int userNbr);
int find_channel(fdList &allFds, std::string chanName); int find_channel(fdList &allFds, std::string chanName);
int find_user(fdList &allFds, std::string userName); int find_user(fdList &allFds, std::string userName);
void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr); //in privmsg.cpp void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr); //in privmsg.cpp

View File

@ -6,50 +6,13 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/07 14:45:45 by apommier #+# #+# */ /* Created: 2023/02/07 14:45:45 by apommier #+# #+# */
/* Updated: 2023/02/13 12:54:35 by apommier ### ########.fr */ /* Updated: 2023/02/15 00:14:50 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../../../includes/ft_irc.hpp" #include "../../../includes/ft_irc.hpp"
void print_registered_msg(fdList &allFds, int userNbr)
{
(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) // void delete_client(fdList &allFds)
// { // {

View File

@ -6,18 +6,63 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/12 23:30:11 by apommier #+# #+# */ /* Created: 2023/02/12 23:30:11 by apommier #+# #+# */
/* Updated: 2023/02/13 11:04:52 by apommier ### ########.fr */ /* Updated: 2023/02/15 00:15:32 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../../../includes/ft_irc.hpp" #include "../../../includes/ft_irc.hpp"
void print_registered_msg(fdList &allFds, int userNbr)
{
(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 " + allFds.creation_date + "\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 connect_client(fdList &allFds, int userNbr) void connect_client(fdList &allFds, int userNbr)
{ {
// allFds.userData[userNbr].fd
std::cout << "connect client start\n"; 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"); 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\n");
return ;
}
//464 ERR_PASSWDMISMATCH
//":Password incorrect"
allFds.userData[userNbr].registered = 1; allFds.userData[userNbr].registered = 1;
print_registered_msg(allFds, userNbr); print_registered_msg(allFds, userNbr);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:28:38 by apommier #+# #+# */ /* Created: 2023/02/06 14:28:38 by apommier #+# #+# */
/* Updated: 2023/02/12 23:37:37 by apommier ### ########.fr */ /* Updated: 2023/02/15 15:41:43 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -23,13 +23,22 @@ void NICK(std::string buffer, fdList &allFds, int userNbr)
if (splitBuff.size() < 2) if (splitBuff.size() < 2)
{ {
cmd_error(allFds, allFds.userData[userNbr].fd, "431 * NICK :No nickname given\n"); cmd_error(allFds, allFds.userData[userNbr].fd, "431 * NICK :No nickname given\n");
//write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18); return ;
}
if (!not_contain_other(splitBuff[1], "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`|^_-{}[]\\"))
{
cmd_error(allFds, allFds.userData[userNbr].fd, "432 * " + splitBuff[1] + " :Erroneous nickname\n");
return ;
}
if (find_user(allFds, splitBuff[1]) != -1)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "433 * " + splitBuff[1] + " :Nickname is already in use\n");
return ; return ;
} }
//if nickname ok then (another user has it? ) //if nickname ok then (another user has it? )
//ERR_NONICKNAMEGIVEN //ERR_NONICKNAMEGIVEN
allFds.userData[userNbr].nickname = splitBuff[1]; allFds.userData[userNbr].nickname = splitBuff[1];
if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty()) if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty() /*&& !allFds.userData[userNbr].password.empty()*/)
{ {
connect_client(allFds, userNbr); connect_client(allFds, userNbr);
// allFds.userData[userNbr].registered = 1; // allFds.userData[userNbr].registered = 1;

View File

@ -6,27 +6,29 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:40:42 by apommier #+# #+# */ /* Created: 2023/02/06 14:40:42 by apommier #+# #+# */
/* Updated: 2023/02/13 17:33:51 by apommier ### ########.fr */ /* Updated: 2023/02/15 15:42:16 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../../../includes/ft_irc.hpp" #include "../../../includes/ft_irc.hpp"
void PASS(std::string buffer, fdList &allFds, int userNbr) void PASS(std::string buffer, fdList &allFds, int userNbr)
{ {
std::string password; 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 --- if (buffer.size() < 6)// ---PASS ---
{ {
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * PASS :Not enough parameters\n"); cmd_error(allFds, allFds.userData[userNbr].fd, "461 * PASS :Not enough parameters\n");
return ; return ;
} }
if (allFds.userData[userNbr].registered)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\n");
return ;
}
// if (splitBuff.size() != 2) // if (splitBuff.size() != 2)
// { // {
@ -36,5 +38,12 @@ void PASS(std::string buffer, fdList &allFds, int userNbr)
// } // }
password = buffer.substr(5, buffer.npos); password = buffer.substr(5, buffer.npos);
allFds.userData[userNbr].password = buffer; 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> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:40:39 by apommier #+# #+# */ /* Created: 2023/02/06 14:40:39 by apommier #+# #+# */
/* Updated: 2023/02/13 20:05:39 by apommier ### ########.fr */ /* Updated: 2023/02/14 01:25:22 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -44,7 +44,7 @@ void USER(std::string buffer, fdList &allFds, int userNbr)
allFds.userData[userNbr].serverName = splitBuff[3]; allFds.userData[userNbr].serverName = splitBuff[3];
allFds.userData[userNbr].realName = realName; allFds.userData[userNbr].realName = realName;
if (!allFds.userData[userNbr].nickname.empty()) if (!allFds.userData[userNbr].nickname.empty() /*&& !allFds.userData[userNbr].password.empty()*/)
{ {
connect_client(allFds, userNbr); connect_client(allFds, userNbr);
// allFds.userData[userNbr].registered = 1; // allFds.userData[userNbr].registered = 1;

View File

@ -6,12 +6,29 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/09 17:21:57 by apommier #+# #+# */ /* Created: 2023/02/09 17:21:57 by apommier #+# #+# */
/* Updated: 2023/02/13 17:45:33 by apommier ### ########.fr */ /* Updated: 2023/02/14 20:13:38 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../../../includes/ft_irc.hpp" #include "../../../includes/ft_irc.hpp"
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 = " << 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\n";
return (-1);
}
int find_channel(fdList &allFds, std::string chanName)//return channel nbr int find_channel(fdList &allFds, std::string chanName)//return channel nbr
{ {
std::_List_iterator<channelData> start = allFds.channelList.begin(); std::_List_iterator<channelData> start = allFds.channelList.begin();
@ -39,7 +56,7 @@ int find_user(fdList &allFds, std::string userName)//return direct user fd
std::cout << "result in find user = " << pastEnd - start << std::endl; std::cout << "result in find user = " << pastEnd - start << std::endl;
std::cout << "name2= ---" << allFds.userData[pastEnd - start - 1].nickname << "---\n"; std::cout << "name2= ---" << allFds.userData[pastEnd - start - 1].nickname << "---\n";
if (allFds.userData[pastEnd - start - 1].nickname == userName) if (allFds.userData[pastEnd - start - 1].nickname == userName)
return (allFds.userData[pastEnd - start - 1].fd); return (pastEnd - start - 1);
start++; start++;
} }
std::cout << "user not found\n"; std::cout << "user not found\n";

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/09 15:40:33 by apommier #+# #+# */ /* Created: 2023/02/09 15:40:33 by apommier #+# #+# */
/* Updated: 2023/02/13 20:21:28 by apommier ### ########.fr */ /* Updated: 2023/02/14 14:50:57 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -18,7 +18,7 @@
// 1459 // 1459
// ERR_NEEDMOREPARAMS + ERR_BANNEDFROMCHAN // ERR_NEEDMOREPARAMS + ERR_BANNEDFROMCHAN
// ERR_INVITEONLYCHAN + ERR_BADCHANNELKEY // ERR_INVITEONLYCHAN + ERR_BADCHANNELKEY
// ERR_CHANNELISFULL x ERR_BADCHANMASK ? // ERR_CHANNELISFULL x ERR_BADCHANMASK ? +
// ERR_NOSUCHCHANNEL x ERR_TOOMANYCHANNELS x // ERR_NOSUCHCHANNEL x ERR_TOOMANYCHANNELS x
// RPL_TOPIC // RPL_TOPIC
@ -74,48 +74,11 @@ int chan_check(fdList &allFds, int userNbr, int chanNbr, std::vector<std::string
void join_or_create(std::vector<std::string> splitBuff, fdList &allFds, int userNbr)
void JOIN(std::string buffer, fdList &allFds, int userNbr)
{ {
std::vector<std::string> splitBuff;
int chanNbr; int chanNbr;
channelData joined_chan; 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 registered\n"); //ERR_NEEDMOREPARAMS
return ;
}
split(buffer, ' ', splitBuff);
if (splitBuff.size() < 2)
{
/*change error*/
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * JOIN :Not enough parameters\n"); //ERR_NEEDMOREPARAMS
return ;
}
//if (splitBuff[1].find(' ') != std::string::npos || splitBuff[1].find(7) != std::string::npos)
if (splitBuff[1][0] != '#' && splitBuff[1][0] != '&')
{
//leave_all(allFds, userNbr);
return ;
}
if (splitBuff[1] == "0")
{
leave_all(allFds, userNbr);
return ;
}
chanNbr = find_channel(allFds, splitBuff[1]); chanNbr = find_channel(allFds, splitBuff[1]);
if (chanNbr != -1) //chan already exist if (chanNbr != -1) //chan already exist
{ {
@ -146,5 +109,54 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0); send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
std::cout << "loop here\n"; std::cout << "loop here\n";
} }
// if (chanNbr == -1)
// {
// }
}
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)
{
/*change error*/
cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not registered\n"); //ERR_NEEDMOREPARAMS
return ;
}
split(buffer, ' ', splitBuff);
if (splitBuff.size() < 2)
{
/*change error*/
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * JOIN :Not enough parameters\n"); //ERR_NEEDMOREPARAMS
return ;
}
//if (splitBuff[1].find(' ') != std::string::npos || splitBuff[1].find(7) != std::string::npos)
if (splitBuff[1][0] != '#' && splitBuff[1][0] != '&')
{
//error bad channel name
msg = "476 * JOIN " + splitBuff[1] + " ::Bad Channel Mask\n";
cmd_error(allFds, allFds.userData[userNbr].fd, msg);
//:Bad Channel Mask
return ;
}
if (splitBuff[1] == "0")
{
leave_all(allFds, userNbr);
return ;
}
join_or_create(splitBuff, allFds, userNbr);
//send 352 and 315 or 353 and 366 (WHO or NAME) //send 352 and 315 or 353 and 366 (WHO or NAME)
} }

View File

@ -0,0 +1,70 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* notice.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/14 21:24:55 by apommier #+# #+# */
/* Updated: 2023/02/14 21:35:45 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../../includes/ft_irc.hpp"
// Commande: PRIVMSG
// Paramètres: <destinataire>{,<destinataire>} <texte à envoyer >
// ERR_NORECIPIENT ERR_NOTEXTTOSEND +
// ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL
// ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS
// ERR_NOSUCHNICK +
// RPL_AWAY
void send_notice_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
{
int pos;
std::string fullMsg;
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\n";
if (dest[0] == '&' || dest[0] == '#')
{
if (is_joined(allFds, dest, userNbr) == -1)
return ;
if ((pos = find_channel(allFds, dest)) == -1)
return ;
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 (i != (size_t)userNbr)
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
if (pos != -1)
{
send(allFds.userData[pos].fd, fullMsg.c_str(), fullMsg.size(), 0);
return ;
}
}
void NOTICE(std::string buffer, fdList &allFds, int userNbr)
{
std::vector<std::string> splitBuff;
std::string msg;
std::cout << "notice bufer= --" << buffer << std::endl;
split(buffer, ' ', splitBuff);
if (splitBuff.size() < 2)
return ;
if (splitBuff.size() < 3)
return ;
std::cout << "notice =" << msg << std::endl;
std::vector<std::string> dest;
split(splitBuff[1], ',', dest);
for (size_t i = 0; i < dest.size(); i++)
send_notice_msg(allFds, buffer, dest[i], userNbr);
}

View File

@ -6,12 +6,19 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 08:53:03 by apommier #+# #+# */ /* Created: 2023/02/11 08:53:03 by apommier #+# #+# */
/* Updated: 2023/02/13 20:28:11 by apommier ### ########.fr */ /* Updated: 2023/02/15 15:18:38 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../../../includes/ft_irc.hpp" #include "../../../includes/ft_irc.hpp"
// Commande: PRIVMSG
// Paramètres: <destinataire>{,<destinataire>} <texte à envoyer >
// ERR_NORECIPIENT ERR_NOTEXTTOSEND +
// ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL
// ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS
// ERR_NOSUCHNICK +
// RPL_AWAY
void PRIVMSG(std::string buffer, fdList &allFds, int userNbr) void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
{ {
@ -20,72 +27,55 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
std::cout << "privmsg bufer= --" << buffer << std::endl; std::cout << "privmsg bufer= --" << buffer << std::endl;
split(buffer, ' ', splitBuff); split(buffer, ' ', splitBuff);
if (splitBuff.size() < 3) if (splitBuff.size() < 2)
{ {
cmd_error(allFds, allFds.userData[userNbr].fd, "431 * PRIVMSG :Not enought argument\n"); cmd_error(allFds, allFds.userData[userNbr].fd, "431 * PRIVMSG :Not enought argument\n");
//write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
return ; return ;
} }
if (splitBuff.size() < 3)
// for (size_t i = 2; i < splitBuff.size(); i++) {
// { cmd_error(allFds, allFds.userData[userNbr].fd, "412 * PRIVMSG :No text to send\n");
// msg += (" " + splitBuff[i]); return ;
// } }
//msg = buffer.substr(buffer.find(':') + 1, std::string::npos);
std::cout << "privmsg =" << msg << std::endl; std::cout << "privmsg =" << msg << std::endl;
std::vector<std::string> dest; std::vector<std::string> dest;
split(splitBuff[1], ',', dest); split(splitBuff[1], ',', dest);
for (size_t i = 0; i < dest.size(); i++) for (size_t i = 0; i < dest.size(); i++)
{
// 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); send_msg(allFds, buffer, dest[i], userNbr);
}
} }
void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr) void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
{ {
int pos; int pos;
//find dest
std::string fullMsg; std::string fullMsg;
//fullMsg = "*" + allFds.userData[userNbr].nickname + "* " + msg;
pos = find_channel(allFds, dest); //return channel nbr fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\n";
if (pos != -1) if (dest[0] == '&' || dest[0] == '#')
{ {
//std::vector<clientData *>::iterator start = allFds.channelList[fd].userList.begin(); if (is_joined(allFds, dest, userNbr) == -1)
//std::vector<clientData *>::iterator pastEnd = allFds.channelList[fd].userList.end(); {
// while (start != pastEnd) cmd_error(allFds, allFds.userData[userNbr].fd, "442 * PRIVMSG " + dest + " :You're not on that channel\n");
// { return ;
// std::cout << "send nickname" << (*start)->nickname << std::endl; }
// ft_putstr_fd((*start)->fd, fullMsg); if ((pos = find_channel(allFds, dest)) == -1)
// start++; {
// std::cout << "loop here\n"; cmd_error(allFds, allFds.userData[userNbr].fd, "401 * PRIVMSG " + dest + " :No such nick/channel\n");
// } return ;
}
for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++) for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++)
{ {
std::cout << "send nickname " << allFds.channelList[pos].userList[i]->nickname << std::endl; std::cout << "send nickname " << allFds.channelList[pos].userList[i]->nickname << std::endl;
//ft_putstr_fd(allFds.channelList[fd].userList[i]->fd, fullMsg); if (i != (size_t)userNbr)
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\n"; send(allFds.channelList[pos].userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
//: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"; std::cout << "loop here\n";
} }
return ; return ;
} }
pos = find_user(allFds, dest); //return direct user fd pos = find_user(allFds, dest); //return direct user fd
if (pos != -1) if (pos != -1)
{ {
ft_putstr_fd(pos, fullMsg); cmd_error(allFds, allFds.userData[userNbr].fd, "401 * PRIVMSG " + dest + " :No such nick/channel\n");
return ; return ;
} }
std::cout << "error msg\n"; send(allFds.userData[pos].fd, fullMsg.c_str(), fullMsg.size(), 0);
//ft_putstr_fd(fd, msg);
} }

View File

@ -3,10 +3,10 @@
/* ::: :::::::: */ /* ::: :::::::: */
/* mode.cpp :+: :+: :+: */ /* mode.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ +:+ +:+ */
/* By: sadjigui <sadjigui@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */
/* Updated: 2023/02/13 00:23:55 by sadjigui ### ########.fr */ /* Updated: 2023/02/14 23:28:49 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -15,7 +15,7 @@
int search_and_erase(std::string &str, std::string toFind) int search_and_erase(std::string &str, std::string toFind)
{ {
// std::vector<string>::iterator i = str.begin; // std::vector<string>::iterator i = str.begin;
int i = 0; int i = 1; //1 instead of 0 to skip +/-
while (str[i] != 0) while (str[i] != 0)
{ {
if (toFind.find(str[i]) == std::string::npos) if (toFind.find(str[i]) == std::string::npos)
@ -23,73 +23,130 @@ int search_and_erase(std::string &str, std::string toFind)
else else
i++; i++;
} }
std::cout << "splitbuff[2]after? = " << str << std::endl;
return 1; return 1;
} }
void verify_option(fdList &allFds, std::string str, int i)
void do_chan_option(fdList &allFds, int userNbr, std::string opt /*, channel (string or direct reference or pointer but no copy)*/)
{ {
(void)allFds; (void)allFds;
(void)i; (void)userNbr;
(void)str; for (int i = 0; opt[i]; i++)
std::string find = "opsitnmlbvk"; {
std::cout << "1 str = "<< str << std::endl; //call option
search_and_erase(str, find); //switch ? if forest? map container ? 2 tab (name and function pointer) ?
std::cout << "2 str = "<< str << std::endl; // opt_i(int signe (= ou -), channel, user);
use_option(allFds, str, ) }
return;
} }
// int look_for_channel(fdList &allFds, std::string str) void do_user_option(fdList &allFds, int userNbr, std::string opt)
// { {
// if (allFds.chanelList[chanNbr.mode.k]) (void)allFds;
// { (void)userNbr;
// if (splitBuff.size() < 3 || allFdschannelList[chanNbr].password != splitBuff[2]) for (int i = 0; opt[i]; i++)
// { {
// errorStr ="475* JOIN" + allFds.channelList[chanNbr].name+" :Cannot join channel(+k)\n"; //call option
// cmd_error(allFds, allFds.userData[userNbr].fd, errorStr); //switch ? if forest? map container ? 2 tab (name and function pointer) ?
// } // opt_i(int signe (= ou -), user);
// return 0; }
// } return;
// } }
void MODE(std::string buffer, fdList &allFds, int userNbr) void MODE(std::string buffer, fdList &allFds, int userNbr)
{ {
(void)buffer;
(void)allFds;
(void)userNbr; (void)userNbr;
int i = 1;
std::vector<std::string> splitBuff; std::vector<std::string> splitBuff;
std::cout << "---------------->" << std::endl;
split(buffer, ' ', splitBuff); split(buffer, ' ', splitBuff);
std::vector<std::string>::iterator ptr = splitBuff.begin(); if (splitBuff.size() < 3)
std::cout << "-------->" << splitBuff.size() << std::endl;
if (splitBuff.size() != 6)
{ {
std::cout << "ERR_NEEDMOREPARAMS" << std::endl; std::cout << "ERR_NEEDMOREPARAMS" << std::endl;
return ; return ;
} }
ptr++; //check if user is op? else error
std::string str = *ptr; //check if (splitBuff[2][0] == +/-) //splitbuff[2] always equal to {[+|-]|o|p|s|i|t|n|b|v}
if (str[0] == '#' || str[0] == '&') //else ??? erreur j'imagine mais j'ai pas trouvé
if (splitBuff[1][0] == '#' || splitBuff[1][0] == '&') //splitbuff[1] always equal to <channel> or <nickname>
{ {
std::string cmd = str.substr(1, str.npos); if (find_channel(allFds, splitBuff[1]) == -1) //if true chan doesn't exist
std::cout << "test = "<< str << std::endl;
if (find_channel(allFds, cmd) < 0)
std::cout << "Channel " << cmd <<" Not found" << std::endl;
while (ptr != splitBuff.end())
{ {
std::string str = *ptr; std::cout << "chan doesn't exist" << std::endl;
if (str[0] == '#' || str[0] == '&') // 403 ERR_NOSUCHCHANNEL
{ // "<nom de canal> :No such channel"
// if (find_channel(allFds, str+1)) return ;
std::cout << "test = "<< str << std::endl; }//else
//verify_option(allFds, str, i); //needed?
} std::cout << "splitbuff[2] = " << splitBuff[2] << std::endl;
verify_option(allFds, str, i);
ptr++; search_and_erase(splitBuff[2], "opsitnmlbvk");
i++; std::cout << "splitbuff[2] after = " << splitBuff[2] << std::endl;
} //do_option one by one here (do_chan_opt)?
return ;
} }
return ; else if ((find_user(allFds, splitBuff[1]) == -1))
{
std::cout << "user doesn't exist" << std::endl;
// 401 ERR_NOSUCHNICK
// "<pseudonyme> :No such nick/channel"
return ;
}
search_and_erase(splitBuff[2], "iwso");
//do_option one by one here (do_user_opt)?
} }
// void verify_option(fdList &allFds, std::string str, int i)
// {
// (void)allFds;
// (void)i;
// (void)str;
// std::string find = "opsitnmlbvk";
// std::cout << "1 str = "<< str << std::endl;
// search_and_erase(str, find);
// std::cout << "2 str = "<< str << std::endl;
// //use_option(allFds, str, )
// }
// void MODE(std::string buffer, fdList &allFds, int userNbr)
// {
// (void)buffer;
// (void)allFds;
// (void)userNbr;
// int i = 1;
// std::vector<std::string> splitBuff;
// std::cout << "---------------->" << std::endl;
// split(buffer, ' ', splitBuff);
// std::vector<std::string>::iterator ptr = splitBuff.begin();
// std::cout << "-------->" << splitBuff.size() << std::endl;
// if (splitBuff.size() != 6)
// {
// std::cout << "ERR_NEEDMOREPARAMS" << std::endl;
// return ;
// }
// ptr++;
// std::string str = *ptr; /*std::string str = splitBuff[1]; ⚠️ */ /*STR sert a rien |*ptr = str|*/
// if (str[0] == '#' || str[0] == '&')
// {
// std::string cmd = str.substr(1, str.npos); //std::string cmd = (*ptr).substr(1, str.npos); //Not needed? need full channel's name with # or &
// std::cout << "test = "<< str << std::endl; //std::cout << "test = "<< *ptr << std::endl;
// if (find_channel(allFds, cmd) < 0) //find_channel(allFds, cmd)
// std::cout << "Channel " << cmd <<" Not found" << std::endl;
// while (ptr != splitBuff.end())
// {
// std::string str = *ptr;
// if (str[0] == '#' || str[0] == '&')
// {
// // if (find_channel(allFds, str+1))
// std::cout << "test = "<< str << std::endl;
// }
// verify_option(allFds, str, i);
// ptr++;
// i++;
// }
// }
// return ;
// }

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/09 22:04:11 by apommier #+# #+# */ /* Created: 2023/02/09 22:04:11 by apommier #+# #+# */
/* Updated: 2023/02/13 16:32:24 by apommier ### ########.fr */ /* Updated: 2023/02/14 21:28:14 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -131,13 +131,13 @@ void INFO(std::string buffer, fdList &allFds, int userNbr)
// return ; // return ;
// } // }
void NOTICE(std::string buffer, fdList &allFds, int userNbr) // void NOTICE(std::string buffer, fdList &allFds, int userNbr)
{ // {
(void)buffer; // (void)buffer;
(void)allFds; // (void)allFds;
(void)userNbr; // (void)userNbr;
return ; // return ;
} // }
void WHO(std::string buffer, fdList &allFds, int userNbr) void WHO(std::string buffer, fdList &allFds, int userNbr)
{ {

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:04:47 by apommier #+# #+# */ /* Created: 2023/02/11 19:04:47 by apommier #+# #+# */
/* Updated: 2023/02/11 20:04:53 by apommier ### ########.fr */ /* Updated: 2023/02/15 15:23:13 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,11 +14,28 @@
void OPER(std::string buffer, fdList &allFds, int userNbr) void OPER(std::string buffer, fdList &allFds, int userNbr)
{ {
int pos;
std::vector<std::string> splitBuff; std::vector<std::string> splitBuff;
std::string msg;
split(buffer, ' ', splitBuff); split(buffer, ' ', splitBuff);
if (splitBuff.size() < 2) if (splitBuff.size() < 3)
{ {
/*change error*/cmd_error(allFds, allFds.userData[userNbr].fd, "431 * OPER :No nickname given\n"); cmd_error(allFds, allFds.userData[userNbr].fd, "461 * OPER :Not enough parameters\n");
return ; return ;
} }
if (splitBuff[2] != allFds.password)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "464 * :Password incorrect\n");
return ;
}
pos = find_user(allFds, splitBuff[1]); //return direct user fd
if (pos != -1)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "401 * SQUIT " + splitBuff[1] + " :No such nick/channel\n");
return ;
}
allFds.userData[pos].op = 1;
msg = "381 * " + allFds.userData[pos].nickname + " :You are now an IRC operator\n";
send(allFds.userData[pos].fd, msg.c_str(), msg.size(), 0);
} }

View File

@ -6,24 +6,44 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:11:03 by apommier #+# #+# */ /* Created: 2023/02/11 19:11:03 by apommier #+# #+# */
/* Updated: 2023/02/12 14:23:39 by apommier ### ########.fr */ /* Updated: 2023/02/15 15:10:43 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../../../includes/ft_irc.hpp" #include "../../../includes/ft_irc.hpp"
//ERR_NOPRIVILEGES ERR_NOSUCHSERVER
void SQUIT(std::string buffer, fdList &allFds, int userNbr) void SQUIT(std::string buffer, fdList &allFds, int userNbr)
{ {
(void)buffer; (void)buffer;
(void)allFds; (void)allFds;
(void)userNbr; (void)userNbr;
if (allFds.userData[userNbr].op) std::vector<std::string> splitBuff;
allFds.alive = 0; split(buffer, ' ', splitBuff);
else if (splitBuff.size() < 2)
{ {
std::cout << "Not op but okay i'll do it\n"; cmd_error(allFds, allFds.userData[userNbr].fd, "431 * SQUIT :Not enought argument\n");
allFds.alive = 0; return ;
} }
if (!allFds.userData[userNbr].op)
{
cmd_error(allFds, allFds.userData[userNbr].fd, "481 * :Permission Denied- You're not an IRC operator\n");
return ;
}
if (splitBuff[2] != "irc.local")
{
cmd_error(allFds, allFds.userData[userNbr].fd, "402 * " + splitBuff[2] + " :No such server\n");
return ;
}
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 ; return ;
} }

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/13 00:16:27 by apommier #+# #+# */ /* Created: 2023/02/13 00:16:27 by apommier #+# #+# */
/* Updated: 2023/02/13 22:54:14 by apommier ### ########.fr */ /* Updated: 2023/02/14 14:27:53 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -51,8 +51,13 @@ void PING(std::string buffer, fdList &allFds, int userNbr)
std::string msg; std::string msg;
std::vector<std::string> splitBuff; std::vector<std::string> splitBuff;
split(buffer, ' ', splitBuff); split(buffer, ' ', splitBuff);
msg = ":irc.local PONG irc.local :irc.local"; msg = ":irc.local PONG irc.local :" + splitBuff[1] + "\n";
//msg = "PONG irc.local " + splitBuff[1];
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0); 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) // if (splitBuff.size() < 2)
// { // {
// cmd_error(allFds, allFds.userData[userNbr].fd, "431 * NICK :No nickname given\n"); // cmd_error(allFds, allFds.userData[userNbr].fd, "431 * NICK :No nickname given\n");

View File

@ -6,20 +6,49 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/11 19:10:26 by apommier #+# #+# */ /* Created: 2023/02/11 19:10:26 by apommier #+# #+# */
/* Updated: 2023/02/12 14:09:33 by apommier ### ########.fr */ /* Updated: 2023/02/15 13:27:15 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../../../includes/ft_irc.hpp" #include "../../../includes/ft_irc.hpp"
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 + "\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])
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";
}
}
}
void QUIT(std::string buffer, fdList &allFds, int userNbr) void QUIT(std::string buffer, fdList &allFds, int userNbr)
{ {
std::vector<std::string> splitBuff; std::vector<std::string> splitBuff;
split(buffer, ' ', splitBuff); split(buffer, ' ', splitBuff);
if (splitBuff.size() == 2) if (splitBuff.size() == 2)
{ {
send_quit_msg(allFds, userNbr, splitBuff[2]);
//print message? //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); delete_user(allFds, userNbr);
return ; return ;
} }

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 22:01:25 by apommier #+# #+# */ /* Created: 2022/12/06 22:01:25 by apommier #+# #+# */
/* Updated: 2023/02/13 19:44:43 by apommier ### ########.fr */ /* Updated: 2023/02/14 01:16:34 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:33 by apommier #+# #+# */ /* Created: 2022/12/01 17:27:33 by apommier #+# #+# */
/* Updated: 2023/02/12 22:35:11 by apommier ### ########.fr */ /* Updated: 2023/02/14 03:00:42 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,21 +14,20 @@
int main(int ac, char **av) int main(int ac, char **av)
{ {
if (!(ac == 3 || ac == 2)) if (!(ac == 3))
{ {
//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"; std::cout << "wrong number of arguments\nFORMAT: ./ircserv <port> <password>\n";
exit(1); exit(1);
} }
std::cout << "============Homemade IRC Server start============" << std::endl; std::cout << "============Homemade IRC Server start============" << std::endl;
// try try
// { {
// initialize(av); initialize(av);
// } }
// catch catch(std::exception &e)
// { {
std::cout << "Fatal error causing the end of the program :/\n";
// } }
initialize(av);
return (0); return (0);
} }

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:58:13 by apommier #+# #+# */ /* Created: 2022/12/06 21:58:13 by apommier #+# #+# */
/* Updated: 2023/02/13 16:47:16 by apommier ### ########.fr */ /* Updated: 2023/02/14 18:11:44 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -23,13 +23,17 @@ void start_loop(fdList &allFds)
allFds.alive = 1; allFds.alive = 1;
std::cout << "serverFd: " << allFds.serverFd << std::endl; //std::cout << "serverFd: " << allFds.serverFd << std::endl;
while (allFds.alive) while (allFds.alive)
{ {
//std::cout << "---------start loop-----------\n";
//std::cout << "\n\n\nwhile alive event loop" << std::endl; //std::cout << "\n\n\nwhile alive event loop" << std::endl;
//std::cout << "in loop nbr user = " << allFds.nbrUser << std::endl; //std::cout << "in loop nbr user = " << allFds.nbrUser << std::endl;
eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 5000);
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 << "eventNbr: " << eventNbr << std::endl; //std::cout << "eventNbr: " << eventNbr << std::endl;
//std::cout << "in loop adress " << &allFds << std::endl; //std::cout << "in loop adress " << &allFds << std::endl;
@ -50,9 +54,9 @@ void start_loop(fdList &allFds)
// if (!clientRequest(allFds, nbr)) // if (!clientRequest(allFds, nbr))
// alive = false; // alive = false;
clientRequest(allFds, nbr); clientRequest(allFds, nbr);
} }
} }
//std::cout << "---------end loop-----------\n";
} }
std::cout << "dead server\n"; std::cout << "dead server\n";

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:44:20 by apommier #+# #+# */ /* Created: 2022/12/06 21:44:20 by apommier #+# #+# */
/* Updated: 2023/02/13 00:04:55 by apommier ### ########.fr */ /* Updated: 2023/02/15 00:14:07 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -26,11 +26,12 @@ void initialize(char **av)
int opt = 1; int opt = 1;
struct sockaddr_in addr; struct sockaddr_in addr;
//int addrLen = sizeof(addr); //int addrLen = sizeof(addr);
fdList allFds; fdList allFds;
//allFds.userData.reserve(MAX_EVENTS); //allFds.userData.reserve(MAX_EVENTS);
//allFds.channelList.reserve(MAX_CHAN); //allFds.channelList.reserve(MAX_CHAN);
allFds.password = av[2];
std::cout << "pass= " << av[2] << std::endl;
allFds.nbrUser = 0; allFds.nbrUser = 0;
allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0); allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0);
if (allFds.serverFd == -1) if (allFds.serverFd == -1)
@ -59,7 +60,9 @@ void initialize(char **av)
// { // {
// nbrRead = read() // nbrRead = read()
// } // }
time_t timer;
time(&timer);
allFds.creation_date = ctime(&timer);
allFds.epollFd = epoll_start(); allFds.epollFd = epoll_start();
//allFds.userData //allFds.userData
epoll_add(allFds.epollFd, allFds.serverFd); epoll_add(allFds.epollFd, allFds.serverFd);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:46:41 by apommier #+# #+# */ /* Created: 2022/12/06 21:46:41 by apommier #+# #+# */
/* Updated: 2023/02/13 10:52:07 by apommier ### ########.fr */ /* Updated: 2023/02/14 14:27:33 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -18,7 +18,8 @@ void ft_error(std::string str)
if (errno) if (errno)
{ {
std::cerr << "errno: " << strerror(errno) << std::endl; std::cerr << "errno: " << strerror(errno) << std::endl;
exit(errno); throw ;//std::bad_alloc();
//exit(errno);
} }
exit(1); exit(1);
} }