Merge branch 'apommier' into sadjigui
This commit is contained in:
commit
e3ac028167
5
Makefile
5
Makefile
@ -6,7 +6,7 @@
|
||||
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# 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/join.cpp\
|
||||
commands/channel/privmsg.cpp\
|
||||
commands/channel/notice.cpp\
|
||||
\
|
||||
commands/other/quit.cpp\
|
||||
commands/other/squit.cpp\
|
||||
commands/other/ping_pong.cpp\
|
||||
\
|
||||
commands/channel_op/invite.cpp\
|
||||
@ -42,6 +42,7 @@ SRCS := main.cpp\
|
||||
commands/channel_op/mode.cpp\
|
||||
commands/channel_op/topic.cpp\
|
||||
\
|
||||
commands/operator/squit.cpp\
|
||||
commands/operator/oper.cpp\
|
||||
\
|
||||
commands/not_done_cmd.cpp #special (temporary)
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -17,7 +17,10 @@
|
||||
#include <netinet/in.h>//inet
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cstdlib>
|
||||
#include <exception>
|
||||
|
||||
#include <ctime>
|
||||
#include <cstring> //std::string
|
||||
#include <cerrno> //errno
|
||||
#include <iostream> //std::cout | cerr
|
||||
@ -37,6 +40,14 @@
|
||||
#define READ_SIZE 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*********************************** */
|
||||
/* ************************************************************************** */
|
||||
@ -139,7 +150,8 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY
|
||||
accessList<clientData> userData;
|
||||
|
||||
int alive;
|
||||
|
||||
std::string password;
|
||||
std::string creation_date;
|
||||
int nbrUser;
|
||||
functionTab parsingTab;
|
||||
};
|
||||
@ -185,6 +197,7 @@ void split_but_keep(std::string const &str, const char delim, std::vector<std::s
|
||||
/* *******************************CHAN UTILS********************************* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
int is_joined(fdList &allFds, std::string chanName, int userNbr);
|
||||
int find_channel(fdList &allFds, std::string chanName);
|
||||
int find_user(fdList &allFds, std::string userName);
|
||||
void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr); //in privmsg.cpp
|
||||
|
||||
@ -6,50 +6,13 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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"
|
||||
|
||||
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)
|
||||
// {
|
||||
|
||||
@ -6,19 +6,64 @@
|
||||
/* 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 */
|
||||
/* Updated: 2023/02/15 00:15:32 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#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)
|
||||
{
|
||||
// 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");
|
||||
|
||||
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;
|
||||
print_registered_msg(allFds, userNbr);
|
||||
std::cout << "connect client end\n";
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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)
|
||||
{
|
||||
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 ;
|
||||
}
|
||||
//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())
|
||||
if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty() /*&& !allFds.userData[userNbr].password.empty()*/)
|
||||
{
|
||||
connect_client(allFds, userNbr);
|
||||
// allFds.userData[userNbr].registered = 1;
|
||||
|
||||
@ -6,27 +6,29 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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"
|
||||
|
||||
|
||||
|
||||
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");
|
||||
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)
|
||||
// {
|
||||
@ -36,5 +38,12 @@ void PASS(std::string buffer, fdList &allFds, int userNbr)
|
||||
// }
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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].realName = realName;
|
||||
if (!allFds.userData[userNbr].nickname.empty())
|
||||
if (!allFds.userData[userNbr].nickname.empty() /*&& !allFds.userData[userNbr].password.empty()*/)
|
||||
{
|
||||
connect_client(allFds, userNbr);
|
||||
// allFds.userData[userNbr].registered = 1;
|
||||
|
||||
@ -6,12 +6,29 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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"
|
||||
|
||||
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
|
||||
{
|
||||
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 << "name2= ---" << allFds.userData[pastEnd - start - 1].nickname << "---\n";
|
||||
if (allFds.userData[pastEnd - start - 1].nickname == userName)
|
||||
return (allFds.userData[pastEnd - start - 1].fd);
|
||||
return (pastEnd - start - 1);
|
||||
start++;
|
||||
}
|
||||
std::cout << "user not found\n";
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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
|
||||
// ERR_NEEDMOREPARAMS + ERR_BANNEDFROMCHAN
|
||||
// ERR_INVITEONLYCHAN + ERR_BADCHANNELKEY
|
||||
// ERR_CHANNELISFULL x ERR_BADCHANMASK ?
|
||||
// ERR_CHANNELISFULL x ERR_BADCHANMASK ? +
|
||||
// ERR_NOSUCHCHANNEL x ERR_TOOMANYCHANNELS x
|
||||
// RPL_TOPIC
|
||||
|
||||
@ -74,48 +74,11 @@ int chan_check(fdList &allFds, int userNbr, int chanNbr, std::vector<std::string
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
||||
void join_or_create(std::vector<std::string> splitBuff, 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 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]);
|
||||
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);
|
||||
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)
|
||||
}
|
||||
70
srcs/commands/channel/notice.cpp
Normal file
70
srcs/commands/channel/notice.cpp
Normal 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);
|
||||
}
|
||||
|
||||
@ -6,12 +6,19 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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"
|
||||
|
||||
// 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)
|
||||
{
|
||||
@ -20,72 +27,55 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
|
||||
|
||||
std::cout << "privmsg bufer= --" << buffer << std::endl;
|
||||
split(buffer, ' ', splitBuff);
|
||||
if (splitBuff.size() < 3)
|
||||
if (splitBuff.size() < 2)
|
||||
{
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "431 * PRIVMSG :Not enought argument\n");
|
||||
//write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
|
||||
return ;
|
||||
}
|
||||
|
||||
// for (size_t i = 2; i < splitBuff.size(); i++)
|
||||
// {
|
||||
// msg += (" " + splitBuff[i]);
|
||||
// }
|
||||
//msg = buffer.substr(buffer.find(':') + 1, std::string::npos);
|
||||
if (splitBuff.size() < 3)
|
||||
{
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "412 * PRIVMSG :No text to send\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++)
|
||||
{
|
||||
// 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 pos;
|
||||
//find dest
|
||||
std::string fullMsg;
|
||||
//fullMsg = "*" + allFds.userData[userNbr].nickname + "* " + msg;
|
||||
pos = find_channel(allFds, dest); //return channel nbr
|
||||
if (pos != -1)
|
||||
|
||||
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\n";
|
||||
if (dest[0] == '&' || dest[0] == '#')
|
||||
{
|
||||
//std::vector<clientData *>::iterator start = allFds.channelList[fd].userList.begin();
|
||||
//std::vector<clientData *>::iterator pastEnd = allFds.channelList[fd].userList.end();
|
||||
// while (start != pastEnd)
|
||||
// {
|
||||
// std::cout << "send nickname" << (*start)->nickname << std::endl;
|
||||
// ft_putstr_fd((*start)->fd, fullMsg);
|
||||
// start++;
|
||||
// std::cout << "loop here\n";
|
||||
// }
|
||||
if (is_joined(allFds, dest, userNbr) == -1)
|
||||
{
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "442 * PRIVMSG " + dest + " :You're not on that channel\n");
|
||||
return ;
|
||||
}
|
||||
if ((pos = find_channel(allFds, dest)) == -1)
|
||||
{
|
||||
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++)
|
||||
{
|
||||
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);
|
||||
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)
|
||||
{
|
||||
ft_putstr_fd(pos, fullMsg);
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "401 * PRIVMSG " + dest + " :No such nick/channel\n");
|
||||
return ;
|
||||
}
|
||||
std::cout << "error msg\n";
|
||||
//ft_putstr_fd(fd, msg);
|
||||
send(allFds.userData[pos].fd, fullMsg.c_str(), fullMsg.size(), 0);
|
||||
}
|
||||
@ -3,10 +3,10 @@
|
||||
/* ::: :::::::: */
|
||||
/* mode.cpp :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: sadjigui <sadjigui@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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)
|
||||
{
|
||||
// std::vector<string>::iterator i = str.begin;
|
||||
int i = 0;
|
||||
int i = 1; //1 instead of 0 to skip +/-
|
||||
while (str[i] != 0)
|
||||
{
|
||||
if (toFind.find(str[i]) == std::string::npos)
|
||||
@ -23,73 +23,130 @@ int search_and_erase(std::string &str, std::string toFind)
|
||||
else
|
||||
i++;
|
||||
}
|
||||
std::cout << "splitbuff[2]after? = " << str << std::endl;
|
||||
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)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)userNbr;
|
||||
for (int i = 0; opt[i]; i++)
|
||||
{
|
||||
//call option
|
||||
//switch ? if forest? map container ? 2 tab (name and function pointer) ?
|
||||
// opt_i(int signe (= ou -), channel, user);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// int look_for_channel(fdList &allFds, std::string str)
|
||||
// {
|
||||
// if (allFds.chanelList[chanNbr.mode.k])
|
||||
// {
|
||||
// if (splitBuff.size() < 3 || allFdschannelList[chanNbr].password != splitBuff[2])
|
||||
// {
|
||||
// errorStr ="475* JOIN" + allFds.channelList[chanNbr].name+" :Cannot join channel(+k)\n";
|
||||
// cmd_error(allFds, allFds.userData[userNbr].fd, errorStr);
|
||||
// }
|
||||
// return 0;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
void do_user_option(fdList &allFds, int userNbr, std::string opt)
|
||||
{
|
||||
(void)allFds;
|
||||
(void)userNbr;
|
||||
for (int i = 0; opt[i]; i++)
|
||||
{
|
||||
//call option
|
||||
//switch ? if forest? map container ? 2 tab (name and function pointer) ?
|
||||
// opt_i(int signe (= ou -), user);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
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)
|
||||
if (splitBuff.size() < 3)
|
||||
{
|
||||
std::cout << "ERR_NEEDMOREPARAMS" << std::endl;
|
||||
return ;
|
||||
}
|
||||
ptr++;
|
||||
std::string str = *ptr;
|
||||
if (str[0] == '#' || str[0] == '&')
|
||||
//check if user is op? else error
|
||||
//check if (splitBuff[2][0] == +/-) //splitbuff[2] always equal to {[+|-]|o|p|s|i|t|n|b|v}
|
||||
//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);
|
||||
std::cout << "test = "<< str << std::endl;
|
||||
if (find_channel(allFds, cmd) < 0)
|
||||
std::cout << "Channel " << cmd <<" Not found" << std::endl;
|
||||
while (ptr != splitBuff.end())
|
||||
if (find_channel(allFds, splitBuff[1]) == -1) //if true chan doesn't exist
|
||||
{
|
||||
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++;
|
||||
}
|
||||
std::cout << "chan doesn't exist" << std::endl;
|
||||
// 403 ERR_NOSUCHCHANNEL
|
||||
// "<nom de canal> :No such channel"
|
||||
return ;
|
||||
}//else
|
||||
//verify_option(allFds, str, i); //needed?
|
||||
|
||||
std::cout << "splitbuff[2] = " << splitBuff[2] << std::endl;
|
||||
|
||||
search_and_erase(splitBuff[2], "opsitnmlbvk");
|
||||
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 ;
|
||||
// }
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 ;
|
||||
// }
|
||||
|
||||
void NOTICE(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
(void)buffer;
|
||||
(void)allFds;
|
||||
(void)userNbr;
|
||||
return ;
|
||||
}
|
||||
// void NOTICE(std::string buffer, fdList &allFds, int userNbr)
|
||||
// {
|
||||
// (void)buffer;
|
||||
// (void)allFds;
|
||||
// (void)userNbr;
|
||||
// return ;
|
||||
// }
|
||||
|
||||
void WHO(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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)
|
||||
{
|
||||
int pos;
|
||||
std::vector<std::string> splitBuff;
|
||||
std::string msg;
|
||||
|
||||
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 ;
|
||||
}
|
||||
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);
|
||||
}
|
||||
@ -6,24 +6,44 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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"
|
||||
|
||||
//ERR_NOPRIVILEGES ERR_NOSUCHSERVER
|
||||
|
||||
void SQUIT(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
(void)buffer;
|
||||
(void)allFds;
|
||||
(void)userNbr;
|
||||
|
||||
if (allFds.userData[userNbr].op)
|
||||
allFds.alive = 0;
|
||||
else
|
||||
|
||||
std::vector<std::string> splitBuff;
|
||||
split(buffer, ' ', splitBuff);
|
||||
if (splitBuff.size() < 2)
|
||||
{
|
||||
std::cout << "Not op but okay i'll do it\n";
|
||||
allFds.alive = 0;
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "431 * SQUIT :Not enought argument\n");
|
||||
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 ;
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* 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 */
|
||||
/* Updated: 2023/02/14 14:27:53 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -51,14 +51,19 @@ void PING(std::string buffer, fdList &allFds, int userNbr)
|
||||
std::string msg;
|
||||
std::vector<std::string> 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);
|
||||
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 * NICK :No nickname given\n");
|
||||
// //write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
|
||||
// return ;
|
||||
// }
|
||||
|
||||
|
||||
return ;
|
||||
}
|
||||
@ -6,20 +6,49 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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"
|
||||
|
||||
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)
|
||||
{
|
||||
std::vector<std::string> splitBuff;
|
||||
split(buffer, ' ', splitBuff);
|
||||
if (splitBuff.size() == 2)
|
||||
{
|
||||
send_quit_msg(allFds, userNbr, splitBuff[2]);
|
||||
//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);
|
||||
return ;
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -24,7 +24,7 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr)
|
||||
std::cout << "===========parse command=============" << std::endl;
|
||||
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;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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)
|
||||
{
|
||||
if (!(ac == 3 || ac == 2))
|
||||
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);
|
||||
}
|
||||
std::cout << "============Homemade IRC Server start============" << std::endl;
|
||||
// try
|
||||
// {
|
||||
// initialize(av);
|
||||
// }
|
||||
// catch
|
||||
// {
|
||||
|
||||
// }
|
||||
initialize(av);
|
||||
try
|
||||
{
|
||||
initialize(av);
|
||||
}
|
||||
catch(std::exception &e)
|
||||
{
|
||||
std::cout << "Fatal error causing the end of the program :/\n";
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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,15 +23,19 @@ void start_loop(fdList &allFds)
|
||||
|
||||
|
||||
allFds.alive = 1;
|
||||
std::cout << "serverFd: " << allFds.serverFd << std::endl;
|
||||
//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, 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 << "in loop adress " << &allFds << std::endl;
|
||||
for (i = 0; i < eventNbr ; i++)
|
||||
{
|
||||
@ -50,9 +54,9 @@ void start_loop(fdList &allFds)
|
||||
// if (!clientRequest(allFds, nbr))
|
||||
// alive = false;
|
||||
clientRequest(allFds, nbr);
|
||||
|
||||
}
|
||||
}
|
||||
//std::cout << "---------end loop-----------\n";
|
||||
}
|
||||
std::cout << "dead server\n";
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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;
|
||||
struct sockaddr_in addr;
|
||||
//int addrLen = sizeof(addr);
|
||||
fdList allFds;
|
||||
fdList allFds;
|
||||
|
||||
//allFds.userData.reserve(MAX_EVENTS);
|
||||
//allFds.channelList.reserve(MAX_CHAN);
|
||||
|
||||
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)
|
||||
@ -59,7 +60,9 @@ void initialize(char **av)
|
||||
// {
|
||||
// nbrRead = read()
|
||||
// }
|
||||
|
||||
time_t timer;
|
||||
time(&timer);
|
||||
allFds.creation_date = ctime(&timer);
|
||||
allFds.epollFd = epoll_start();
|
||||
//allFds.userData
|
||||
epoll_add(allFds.epollFd, allFds.serverFd);
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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)
|
||||
{
|
||||
std::cerr << "errno: " << strerror(errno) << std::endl;
|
||||
exit(errno);
|
||||
throw ;//std::bad_alloc();
|
||||
//exit(errno);
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user