change all function? understand send() and foremost what to send, connection to irssi work
This commit is contained in:
parent
e58d03ff34
commit
a72c97f0f8
4
Makefile
4
Makefile
@ -6,7 +6,7 @@
|
||||
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2022/12/01 17:27:29 by apommier #+# #+# #
|
||||
# Updated: 2023/02/12 20:53:25 by apommier ### ########.fr #
|
||||
# Updated: 2023/02/13 00:20:18 by apommier ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
@ -27,6 +27,7 @@ SRCS := main.cpp\
|
||||
commands/auth/pass.cpp\
|
||||
commands/auth/user.cpp\
|
||||
commands/auth/auth_utils.cpp\
|
||||
commands/auth/connect_client.cpp\
|
||||
\
|
||||
commands/channel/channel_utils.cpp\
|
||||
commands/channel/join.cpp\
|
||||
@ -34,6 +35,7 @@ SRCS := main.cpp\
|
||||
\
|
||||
commands/other/quit.cpp\
|
||||
commands/other/squit.cpp\
|
||||
commands/other/ping_pong.cpp\
|
||||
\
|
||||
commands/channel_op/invite.cpp\
|
||||
commands/channel_op/kick.cpp\
|
||||
|
||||
@ -6,13 +6,17 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/01 17:27:37 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 21:10:18 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 19:48:40 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <sys/socket.h> //socket function
|
||||
|
||||
#include <netinet/in.h>//inet
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cstring> //std::string
|
||||
#include <cerrno> //errno
|
||||
@ -85,7 +89,9 @@ struct clientData //each client have one
|
||||
{
|
||||
bool registered;
|
||||
|
||||
clientData() { registered = 0; }
|
||||
struct sockaddr_in addr;
|
||||
std::string ip;
|
||||
|
||||
std::string nickname;
|
||||
std::string password;
|
||||
|
||||
@ -101,6 +107,8 @@ struct clientData //each client have one
|
||||
|
||||
int fd;
|
||||
int op;
|
||||
clientData() : registered(0), op(0) {}
|
||||
// { registered = 0; op = 0;}
|
||||
};
|
||||
|
||||
struct channelData //each chan have one
|
||||
@ -157,6 +165,7 @@ void cmd_error(fdList &allFds, int userNbr, std::string error);
|
||||
void ft_error(std::string str);
|
||||
void close_fd(int fd);
|
||||
int contain_any(std::string str, std::string toFind);
|
||||
int not_contain_other(std::string str, std::string toFind);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* *******************************AUTH UTILS********************************* */
|
||||
@ -200,6 +209,7 @@ int epoll_start(); //2nd
|
||||
|
||||
void new_connection(fdList &allFds);
|
||||
bool clientRequest(fdList &allFds, int userNbr);
|
||||
void connect_client(fdList &allFds, int userNbr);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* ***************************COMMANDS PARSING******************************* */
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 21:40:10 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 19:21:07 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -18,6 +18,7 @@ bool clientRequest(fdList &allFds, int userNbr)//,
|
||||
char buf[1024] = {0};
|
||||
std::string buffer;
|
||||
size_t len = 1024;
|
||||
int ret = 0;
|
||||
|
||||
//buf.reserve(1024);
|
||||
//se demerder pour join quand pas \n
|
||||
@ -27,9 +28,10 @@ bool clientRequest(fdList &allFds, int userNbr)//,
|
||||
|
||||
//std::cout << "client request!" << std::endl;
|
||||
//if (recv(allFds.userData[userNbr].fd, buf, len, 0) == -1)
|
||||
if (recv(allFds.userData[userNbr].fd, buf, len, 0) == -1)
|
||||
if ((ret = recv(allFds.userData[userNbr].fd, buf, len, 0)) == -1)
|
||||
ft_error("recv() error");
|
||||
buffer = buf;
|
||||
buffer[ret] = 0;
|
||||
if (buffer.empty())
|
||||
{
|
||||
//delete client
|
||||
@ -42,6 +44,10 @@ bool clientRequest(fdList &allFds, int userNbr)//,
|
||||
return (1);
|
||||
}
|
||||
std::cout << "BUFFER: ---" << buf << "---" << std::endl;
|
||||
// for (int i = 0; buffer[i]; i++)
|
||||
// {
|
||||
// std::cout << i << " = " << (int)buffer[i] << std::endl;
|
||||
// }
|
||||
|
||||
//split with \n and while (tab de split) -> parsing
|
||||
|
||||
@ -49,7 +55,7 @@ bool clientRequest(fdList &allFds, int userNbr)//,
|
||||
split_but_keep(buffer, '\n', splitBuff);
|
||||
for (size_t i = 0; i < splitBuff.size(); i++)
|
||||
{
|
||||
parse_commands(splitBuff[i], allFds, userNbr);
|
||||
parse_commands(splitBuff[i], allFds, userNbr);
|
||||
}
|
||||
|
||||
return (1);
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/07 14:45:45 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/11 10:40:42 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 12:54:35 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -14,13 +14,41 @@
|
||||
|
||||
void print_registered_msg(fdList &allFds, int userNbr)
|
||||
{
|
||||
ft_putstr_fd(allFds.userData[userNbr].fd, "-------------------WELCOME TO MY PERSONNAL IRC SERVER!-------------------" );
|
||||
ft_putstr_fd(allFds.userData[userNbr].fd, "your nickname is |" + allFds.userData[userNbr].nickname );
|
||||
ft_putstr_fd(allFds.userData[userNbr].fd, "your password is |" + allFds.userData[userNbr].password );
|
||||
ft_putstr_fd(allFds.userData[userNbr].fd, "your username is |" + allFds.userData[userNbr].userName );
|
||||
ft_putstr_fd(allFds.userData[userNbr].fd, "your realname is |" + allFds.userData[userNbr].realName );
|
||||
ft_putstr_fd(allFds.userData[userNbr].fd, "your hostname is |" + allFds.userData[userNbr].hostName );
|
||||
ft_putstr_fd(allFds.userData[userNbr].fd, "your servername is |" + allFds.userData[userNbr].serverName );
|
||||
(void)allFds;
|
||||
(void)userNbr;
|
||||
|
||||
std::string msg;
|
||||
msg = ":irc.local 001 " + allFds.userData[userNbr].nickname + " : Welcome to the Internet Relay Network " + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].hostName + "\n";
|
||||
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
|
||||
msg = ":irc.local 002 " + allFds.userData[userNbr].nickname + " : Your host is irc.local" + ", running version InspIRCd-3\n"; //+ allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].hostName;
|
||||
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
|
||||
msg = ":irc.local 003 " + allFds.userData[userNbr].nickname + " : This server was created " + "09:58:11 Feb 13 2023\n";//<date>;
|
||||
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
|
||||
msg = ":irc.local 004 " + allFds.userData[userNbr].nickname + "irc.local " + "InspIRCd-3 " + "iosw " + "biklmnopstv\n";
|
||||
//<servername> <version> <available user modes> <available channel modes
|
||||
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
|
||||
|
||||
|
||||
|
||||
// 001 RPL_WELCOME
|
||||
// "Welcome to the Internet Relay Network
|
||||
// <nick>!<user>@<host>"
|
||||
// 002 RPL_YOURHOST
|
||||
// "Your host is <servername>, running version <ver>"
|
||||
// 003 RPL_CREATED
|
||||
// "This server was created <date>"
|
||||
// 004 RPL_MYINFO
|
||||
// "<servername> <version> <available user modes>
|
||||
// <available channel modes>"
|
||||
|
||||
|
||||
// ft_putstr_fd(allFds.userData[userNbr].fd, "-------------------WELCOME TO MY PERSONNAL IRC SERVER!-------------------" );
|
||||
// ft_putstr_fd(allFds.userData[userNbr].fd, "your nickname is |" + allFds.userData[userNbr].nickname );
|
||||
// ft_putstr_fd(allFds.userData[userNbr].fd, "your password is |" + allFds.userData[userNbr].password );
|
||||
// ft_putstr_fd(allFds.userData[userNbr].fd, "your username is |" + allFds.userData[userNbr].userName );
|
||||
// ft_putstr_fd(allFds.userData[userNbr].fd, "your realname is |" + allFds.userData[userNbr].realName );
|
||||
// ft_putstr_fd(allFds.userData[userNbr].fd, "your hostname is |" + allFds.userData[userNbr].hostName );
|
||||
// ft_putstr_fd(allFds.userData[userNbr].fd, "your servername is |" + allFds.userData[userNbr].serverName );
|
||||
}
|
||||
|
||||
// void delete_client(fdList &allFds)
|
||||
|
||||
26
srcs/commands/auth/connect_client.cpp
Normal file
26
srcs/commands/auth/connect_client.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* connect_client.cpp :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/12 23:30:11 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/13 11:04:52 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "../../../includes/ft_irc.hpp"
|
||||
|
||||
void connect_client(fdList &allFds, int userNbr)
|
||||
{
|
||||
// allFds.userData[userNbr].fd
|
||||
std::cout << "connect client start\n";
|
||||
// if (-1 == connect(allFds.userData[userNbr].fd, (struct sockaddr *)&allFds.userData[userNbr].addr, sizeof(allFds.userData[userNbr].addr)))
|
||||
// ft_error("connect() error");
|
||||
|
||||
allFds.userData[userNbr].registered = 1;
|
||||
print_registered_msg(allFds, userNbr);
|
||||
std::cout << "connect client end\n";
|
||||
//ft_putstr_fd(allFds.userData[userNbr].fd, ":irc.local NOTICE kinou :*** Could not resolve your hostname: Request timed out; using your IP address (172.17.0.1) instead.\nirc.local 376 kinou :End of message of the day.");
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/06 14:28:38 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/09 13:19:51 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/12 23:37:37 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -31,8 +31,9 @@ void NICK(std::string buffer, fdList &allFds, int userNbr)
|
||||
allFds.userData[userNbr].nickname = splitBuff[1];
|
||||
if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty())
|
||||
{
|
||||
allFds.userData[userNbr].registered = 1;
|
||||
print_registered_msg(allFds, userNbr);
|
||||
connect_client(allFds, userNbr);
|
||||
// allFds.userData[userNbr].registered = 1;
|
||||
// print_registered_msg(allFds, userNbr);
|
||||
}
|
||||
|
||||
return ;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/06 14:40:42 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/09 13:20:00 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 17:33:51 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -16,6 +16,12 @@ void PASS(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
std::string password;
|
||||
|
||||
|
||||
if (allFds.userData[userNbr].registered)
|
||||
{
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\n");
|
||||
return ;
|
||||
}
|
||||
if (buffer.size() < 6)// ---PASS ---
|
||||
{
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * PASS :Not enough parameters\n");
|
||||
@ -25,14 +31,10 @@ void PASS(std::string buffer, fdList &allFds, int userNbr)
|
||||
// if (splitBuff.size() != 2)
|
||||
// {
|
||||
// cmd_error(allFds, userNbr, "461 * PASS :Not enough parameters");
|
||||
// //write(allFds.userData[userNbr].fd, "ERR_NEEDMOREPARAMS", 18);
|
||||
// //write(allFds.userData[userNbr].fd, "ERR_NEEDMOREPARAMS", 18);
|
||||
// return ;
|
||||
// }
|
||||
else if (allFds.userData[userNbr].registered)
|
||||
{
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "462 * PASS :You may not reregister\n");
|
||||
return ;
|
||||
}
|
||||
|
||||
password = buffer.substr(5, buffer.npos);
|
||||
allFds.userData[userNbr].password = buffer;
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/06 14:40:39 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 16:26:48 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 20:05:39 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -17,32 +17,6 @@
|
||||
//ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
|
||||
|
||||
|
||||
|
||||
struct modeChan
|
||||
{
|
||||
bool o;
|
||||
bool p;
|
||||
bool s;
|
||||
bool i;
|
||||
bool t;
|
||||
bool n;
|
||||
bool m;
|
||||
bool l;
|
||||
bool b;
|
||||
bool v;
|
||||
bool k;
|
||||
};
|
||||
|
||||
struct modeUser
|
||||
{
|
||||
bool i;
|
||||
bool s;
|
||||
bool w;
|
||||
bool o;
|
||||
};
|
||||
|
||||
|
||||
|
||||
void USER(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
if (allFds.userData[userNbr].registered == 1)
|
||||
@ -72,7 +46,8 @@ void USER(std::string buffer, fdList &allFds, int userNbr)
|
||||
allFds.userData[userNbr].realName = realName;
|
||||
if (!allFds.userData[userNbr].nickname.empty())
|
||||
{
|
||||
allFds.userData[userNbr].registered = 1;
|
||||
print_registered_msg(allFds, userNbr);
|
||||
connect_client(allFds, userNbr);
|
||||
// allFds.userData[userNbr].registered = 1;
|
||||
// print_registered_msg(allFds, userNbr);
|
||||
}
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/09 17:21:57 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 15:23:10 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 17:45:33 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -16,11 +16,11 @@ int find_channel(fdList &allFds, std::string chanName)//return channel nbr
|
||||
{
|
||||
std::_List_iterator<channelData> start = allFds.channelList.begin();
|
||||
std::_List_iterator<channelData> pastEnd = allFds.channelList.end();
|
||||
std::cout << "name1= ---" << chanName << "---\n";
|
||||
//std::cout << "name1= ---" << chanName << "---\n";
|
||||
while (start != pastEnd)
|
||||
{
|
||||
std::cout << "result in find chan = " << pastEnd - start << std::endl;
|
||||
std::cout << "name2= ---" << allFds.channelList[pastEnd - start - 1].name << "---\n";
|
||||
//std::cout << "result in find chan = " << pastEnd - start << std::endl;
|
||||
std::cout << "test = " << allFds.channelList[pastEnd - start - 1].name << "---\n";
|
||||
if (allFds.channelList[pastEnd - start - 1].name == chanName)
|
||||
return (pastEnd - start - 1);
|
||||
start++;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/09 15:40:33 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 22:03:21 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 20:21:28 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -69,17 +69,33 @@ int chan_check(fdList &allFds, int userNbr, int chanNbr, std::vector<std::string
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
std::vector<std::string> splitBuff;
|
||||
int chanNbr;
|
||||
channelData joined_chan;
|
||||
std::cout << "==========join start========\n";
|
||||
|
||||
std::cout << "userNbr= " << userNbr << std::endl;
|
||||
if (!allFds.userData[userNbr].registered)
|
||||
{
|
||||
/*change error*/
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not regestered\n"); //ERR_NEEDMOREPARAMS
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not registered\n"); //ERR_NEEDMOREPARAMS
|
||||
return ;
|
||||
}
|
||||
split(buffer, ' ', splitBuff);
|
||||
@ -108,9 +124,7 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
||||
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList[chanNbr]); //add chan in user data
|
||||
allFds.channelList[chanNbr].userList.push_back(&allFds.userData[userNbr]);//add user in chan data
|
||||
allFds.channelList[chanNbr].nbrUser++;
|
||||
//std::cout << "join2 nickname " << allFds.channelList.back().userList[0]->nickname << std::endl;
|
||||
//std::cout << "join2 fd " << allFds.channelList.back().userList[0]->nickname << std::endl;
|
||||
//message nickname joined the channel?
|
||||
joined_chan = *(allFds.userData[userNbr].joinedChan.back());
|
||||
}
|
||||
else //chan doesn't exist yet
|
||||
{
|
||||
@ -121,11 +135,16 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
||||
new_chan.nbrUser = 1;
|
||||
new_chan.userList.push_back(&allFds.userData[userNbr]);
|
||||
//new_chan.userList
|
||||
|
||||
joined_chan = new_chan;
|
||||
allFds.channelList.push_back(new_chan);
|
||||
allFds.userData[userNbr].joinedChan.push_back(&allFds.channelList.back());//add chan in user data
|
||||
//std::cout << "join nickname " << allFds.channelList[0].userList[0]->nickname << std::endl;
|
||||
//std::cout << "join fd " << allFds.channelList[0].userList[0]->fd << std::endl;
|
||||
//message nickname created the channel?
|
||||
}
|
||||
for (int i = 0; i < joined_chan.nbrUser; i++)
|
||||
{
|
||||
std::string fullMsg;
|
||||
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@" + allFds.userData[userNbr].ip + " JOIN :" + joined_chan.name + "\n";
|
||||
send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
|
||||
std::cout << "loop here\n";
|
||||
}
|
||||
//send 352 and 315 or 353 and 366 (WHO or NAME)
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/11 08:53:03 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/11 12:38:51 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 20:28:11 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -18,6 +18,7 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
|
||||
std::vector<std::string> splitBuff;
|
||||
std::string msg;
|
||||
|
||||
std::cout << "privmsg bufer= --" << buffer << std::endl;
|
||||
split(buffer, ' ', splitBuff);
|
||||
if (splitBuff.size() < 3)
|
||||
{
|
||||
@ -26,27 +27,36 @@ void PRIVMSG(std::string buffer, fdList &allFds, int userNbr)
|
||||
return ;
|
||||
}
|
||||
|
||||
for (size_t i = 2; i < splitBuff.size(); i++)
|
||||
{
|
||||
msg += (" " + splitBuff[i]);
|
||||
}
|
||||
// for (size_t i = 2; i < splitBuff.size(); i++)
|
||||
// {
|
||||
// msg += (" " + splitBuff[i]);
|
||||
// }
|
||||
//msg = buffer.substr(buffer.find(':') + 1, std::string::npos);
|
||||
std::cout << "privmsg =" << msg << std::endl;
|
||||
|
||||
std::vector<std::string> dest;
|
||||
split(splitBuff[1], ',', dest);
|
||||
for (size_t i = 0; i < dest.size(); i++)
|
||||
{
|
||||
send_msg(allFds, msg, dest[i], userNbr);
|
||||
// std::cout << "dest[i] =" << dest[i] << "|" << std::endl;
|
||||
// std::cout << "dest[i] =" << dest[i] << "|" << std::endl;
|
||||
// std::cout << "dest[i] =" << dest[i] << "|" << std::endl;
|
||||
// std::cout << "chan =" << allFds.channelList[0].name << "|" << std::endl;
|
||||
// std::cout << "chan =" << allFds.channelList[0].name << "|" << std::endl;
|
||||
// std::cout << "chan =" << allFds.channelList[0].name << "|" << std::endl;
|
||||
// std::cout << "result =" << (allFds.channelList[0].name == dest[i]) << "|" << std::endl;
|
||||
send_msg(allFds, buffer, dest[i], userNbr);
|
||||
}
|
||||
}
|
||||
|
||||
void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
|
||||
{
|
||||
int fd;
|
||||
int pos;
|
||||
//find dest
|
||||
std::string fullMsg;
|
||||
fullMsg = "*" + allFds.userData[userNbr].nickname + "* " + msg;
|
||||
fd = find_channel(allFds, dest); //return channel nbr
|
||||
if (fd != -1)
|
||||
//fullMsg = "*" + allFds.userData[userNbr].nickname + "* " + msg;
|
||||
pos = find_channel(allFds, dest); //return channel nbr
|
||||
if (pos != -1)
|
||||
{
|
||||
//std::vector<clientData *>::iterator start = allFds.channelList[fd].userList.begin();
|
||||
//std::vector<clientData *>::iterator pastEnd = allFds.channelList[fd].userList.end();
|
||||
@ -57,19 +67,23 @@ void send_msg(fdList &allFds, std::string msg, std::string dest, int userNbr)
|
||||
// start++;
|
||||
// std::cout << "loop here\n";
|
||||
// }
|
||||
for (size_t i = 0; i < allFds.channelList[fd].userList.size(); i++)
|
||||
for (size_t i = 0; i < allFds.channelList[pos].userList.size(); i++)
|
||||
{
|
||||
std::cout << "send nickname " << allFds.channelList[fd].userList[i]->nickname << std::endl;
|
||||
ft_putstr_fd(allFds.channelList[fd].userList[i]->fd, fullMsg);
|
||||
std::cout << "send nickname " << allFds.channelList[pos].userList[i]->nickname << std::endl;
|
||||
//ft_putstr_fd(allFds.channelList[fd].userList[i]->fd, fullMsg);
|
||||
fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg + "\n";
|
||||
//:kinou2!kinou@172.17.0.1 PRIVMSG #test :cc
|
||||
//send(allFds.channelList[pos].userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
|
||||
send(allFds.channelList[pos].userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
|
||||
std::cout << "loop here\n";
|
||||
}
|
||||
return ;
|
||||
}
|
||||
|
||||
fd = find_user(allFds, dest); //return direct user fd
|
||||
if (fd != -1)
|
||||
pos = find_user(allFds, dest); //return direct user fd
|
||||
if (pos != -1)
|
||||
{
|
||||
ft_putstr_fd(fd, fullMsg);
|
||||
ft_putstr_fd(pos, fullMsg);
|
||||
return ;
|
||||
}
|
||||
std::cout << "error msg\n";
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/10 15:46:10 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/11 13:51:28 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 18:22:37 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -16,7 +16,7 @@ void split(std::string const &str, const char delim, std::vector<std::string> &o
|
||||
{
|
||||
size_t start;
|
||||
size_t end = 0;
|
||||
|
||||
|
||||
while ((start = str.find_first_not_of(delim, end)) != std::string::npos)
|
||||
{
|
||||
end = str.find(delim, start);
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/09 22:04:11 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 17:30:37 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 16:32:24 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -171,21 +171,15 @@ void KILL(std::string buffer, fdList &allFds, int userNbr)
|
||||
return ;
|
||||
}
|
||||
|
||||
void PING(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
(void)buffer;
|
||||
(void)allFds;
|
||||
(void)userNbr;
|
||||
return ;
|
||||
}
|
||||
// void PING(std::string buffer, fdList &allFds, int userNbr)
|
||||
// {
|
||||
// (void)buffer;
|
||||
// (void)allFds;
|
||||
// (void)userNbr;
|
||||
// return ;
|
||||
// }
|
||||
|
||||
|
||||
void PONG(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
(void)buffer;
|
||||
(void)allFds;
|
||||
(void)userNbr;
|
||||
return ;
|
||||
}
|
||||
|
||||
void ERROR(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
|
||||
64
srcs/commands/other/ping_pong.cpp
Normal file
64
srcs/commands/other/ping_pong.cpp
Normal file
@ -0,0 +1,64 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ping_pong.cpp :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/13 00:16:27 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/13 22:54:14 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "../../../includes/ft_irc.hpp"
|
||||
|
||||
|
||||
// void ft_putstr_fd(int fd, std::string str)
|
||||
// {
|
||||
// write(fd, str.c_str(), str.size());
|
||||
// write(fd, "\n", 1);
|
||||
// }
|
||||
|
||||
void PONG(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
(void)buffer;
|
||||
(void)allFds;
|
||||
(void)userNbr;
|
||||
|
||||
std::string msg;
|
||||
std::vector<std::string> splitBuff;
|
||||
split(buffer, ' ', splitBuff);
|
||||
msg = ":irc.local PONG irc.local :irc.local";
|
||||
// ":irc.local PONG irc.local :irc.local"
|
||||
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
|
||||
// if (splitBuff.size() < 2)
|
||||
// {
|
||||
// cmd_error(allFds, allFds.userData[userNbr].fd, "431 * NICK :No nickname given\n");
|
||||
// //write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
|
||||
// return ;
|
||||
// }
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
void PING(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
(void)buffer;
|
||||
(void)allFds;
|
||||
(void)userNbr;
|
||||
|
||||
|
||||
std::string msg;
|
||||
std::vector<std::string> splitBuff;
|
||||
split(buffer, ' ', splitBuff);
|
||||
msg = ":irc.local PONG irc.local :irc.local";
|
||||
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
|
||||
// if (splitBuff.size() < 2)
|
||||
// {
|
||||
// cmd_error(allFds, allFds.userData[userNbr].fd, "431 * NICK :No nickname given\n");
|
||||
// //write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
|
||||
// return ;
|
||||
// }
|
||||
|
||||
return ;
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/06 22:01:25 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 16:19:20 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 19:44:43 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -24,6 +24,17 @@ 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;
|
||||
std::cout << "size= " << buffer.size() << std::endl;
|
||||
if (buffer.find(13) != buffer.size() - 2)
|
||||
std::cout << "BE CAREFUL CHAR 10 (line feed) not at end\n";
|
||||
buffer.erase(buffer.find(13), 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
allFds.userData[userNbr].cmdBuffer += buffer;
|
||||
if (allFds.userData[userNbr].cmdBuffer.find('\n') == std::string::npos)
|
||||
@ -39,8 +50,6 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr)
|
||||
std::cout << "Command not found\n";
|
||||
else
|
||||
{
|
||||
//std::cout << "Command name = " << allFds.parsingTab.cmdName[a] << std::endl;
|
||||
//std::cout << "Command nbr = " << a << std::endl;
|
||||
allFds.parsingTab.cmdPtr[a](allFds.userData[userNbr].cmdBuffer, allFds, userNbr);
|
||||
//allFds.parsingTab.cmdPtr[a]
|
||||
//JOIN(allFds.userData[userNbr].cmdBuffer, allFds, userNbr);
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/12 20:38:50 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 20:39:10 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 20:25:45 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -18,6 +18,7 @@ void del_user_in_chan(clientData *user, channelData *chan)
|
||||
for (i = 0; user != chan->userList[i]; i++)
|
||||
;
|
||||
chan->userList.erase(chan->userList.begin() + i);
|
||||
chan->nbrUser--;
|
||||
}
|
||||
|
||||
void delete_user(fdList &allFds, int userNbr)
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/01 17:27:33 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/09 14:39:07 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/12 22:35:11 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -15,7 +15,11 @@
|
||||
int main(int ac, char **av)
|
||||
{
|
||||
if (!(ac == 3 || ac == 2))
|
||||
ft_error("wrong number of arguments\nFORMAT: ./ircserv <port> <password>");
|
||||
{
|
||||
//ft_error("wrong number of arguments\nFORMAT: ./ircserv <port> <password>");
|
||||
std::cout << "wrong number of arguments\nFORMAT: ./ircserv <port> <password>\n";
|
||||
exit(1);
|
||||
}
|
||||
std::cout << "============Homemade IRC Server start============" << std::endl;
|
||||
// try
|
||||
// {
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/09 22:26:27 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 21:42:07 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 19:46:41 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -44,7 +44,9 @@ void new_connection(fdList &allFds)
|
||||
|
||||
clientData newElement;
|
||||
newElement.fd = newFd;
|
||||
newElement.op = 0;
|
||||
newElement.addr = addr;
|
||||
newElement.ip = inet_ntoa(addr.sin_addr);
|
||||
//newElement.op = 0;
|
||||
allFds.userData.push_back(newElement);
|
||||
//allFds.userData[allFds.nbrUser].fd = allFds.userList[allFds.nbrUser];
|
||||
//std::cout << "newConnection | user in data fd = " << allFds.userData[allFds.nbrUser].fd << std::endl;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/06 21:58:13 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 14:21:04 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 16:47:16 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -26,10 +26,11 @@ void start_loop(fdList &allFds)
|
||||
std::cout << "serverFd: " << allFds.serverFd << std::endl;
|
||||
while (allFds.alive)
|
||||
{
|
||||
//std::cout << "loop" << std::endl;
|
||||
|
||||
//std::cout << "\n\n\nwhile alive event loop" << std::endl;
|
||||
//std::cout << "in loop nbr user = " << allFds.nbrUser << std::endl;
|
||||
eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 5000);
|
||||
//std::cout << "eventNbr = " << eventNbr << std::endl;
|
||||
//std::cout << "eventNbr: " << eventNbr << std::endl;
|
||||
//std::cout << "in loop adress " << &allFds << std::endl;
|
||||
for (i = 0; i < eventNbr ; i++)
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/06 21:44:20 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 15:00:19 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 00:04:55 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -46,7 +46,7 @@ void initialize(char **av)
|
||||
ft_error("wrong format for <port>\nneed to be an positive integer");
|
||||
if (bind(allFds.serverFd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
||||
ft_error("bind() error");
|
||||
if (listen(allFds.serverFd, 100) == -1)
|
||||
if (listen(allFds.serverFd, 10) == -1)
|
||||
ft_error("listen() error");
|
||||
|
||||
// newSockFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/06 21:46:41 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 20:52:45 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/13 10:52:07 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -17,7 +17,7 @@ void ft_error(std::string str)
|
||||
std::cerr << str << std::endl;
|
||||
if (errno)
|
||||
{
|
||||
std::cerr << "errno: " << strerror(errno);
|
||||
std::cerr << "errno: " << strerror(errno) << std::endl;
|
||||
exit(errno);
|
||||
}
|
||||
exit(1);
|
||||
@ -31,20 +31,24 @@ void close_fd(int fd)
|
||||
|
||||
void ft_putstr_fd(int fd, std::string str)
|
||||
{
|
||||
write(fd, str.c_str(), str.size());
|
||||
write(fd, "\n", 1);
|
||||
// write(fd, str.c_str(), str.size());
|
||||
// write(fd, "\n", 1);
|
||||
str += "\n";
|
||||
send(fd, str.c_str(), str.size(), 0);
|
||||
}
|
||||
|
||||
void cmd_error(fdList &allFds, int fd, std::string error)
|
||||
{
|
||||
(void)allFds; //to delete
|
||||
write(fd, ":irc.local ", 11);
|
||||
write(fd, error.c_str(), error.size());
|
||||
error = ":irc.local " + error;
|
||||
//write(fd, ":irc.local ", 11);
|
||||
//write(fd, error.c_str(), error.size());
|
||||
send(fd, error.c_str(), error.size(), 0);
|
||||
}
|
||||
|
||||
int contain_any(std::string str, std::string toFind)
|
||||
{
|
||||
for (int i = 0; toFind[i] != -1; i++)
|
||||
for (int i = 0; toFind[i] != 0; i++)
|
||||
{
|
||||
if (str.find(toFind[i]) != std::string::npos)
|
||||
return (1);
|
||||
@ -52,6 +56,16 @@ int contain_any(std::string str, std::string toFind)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int not_contain_other(std::string str, std::string toFind)
|
||||
{
|
||||
for (int i = 0; str[i] != 0; i++)
|
||||
{
|
||||
if (toFind.find(str[i]) == std::string::npos)
|
||||
return (0);
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
// void find_user_in_chan(fdList &allFds, channelData *chan)
|
||||
// {
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user