start coding command pass/nick/user and add client/channel struct
This commit is contained in:
parent
4bc54b29d7
commit
fb1b7b10cf
8
Makefile
8
Makefile
@ -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: 2022/12/20 23:31:36 by apommier ### ########.fr #
|
# Updated: 2023/02/07 14:47:20 by apommier ### ########.fr #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
@ -18,7 +18,11 @@ SRCS := main.cpp\
|
|||||||
client_request.cpp\
|
client_request.cpp\
|
||||||
new_connection.cpp\
|
new_connection.cpp\
|
||||||
server_loop.cpp\
|
server_loop.cpp\
|
||||||
commands/parse_commands.cpp
|
commands/parse_commands.cpp\
|
||||||
|
commands/auth/nick.cpp\
|
||||||
|
commands/auth/pass.cpp\
|
||||||
|
commands/auth/user.cpp\
|
||||||
|
commands/auth/utils.cpp
|
||||||
|
|
||||||
CC = c++
|
CC = c++
|
||||||
FLAGS = -g
|
FLAGS = -g
|
||||||
|
|||||||
@ -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/06 15:10:08 by apommier ### ########.fr */
|
/* Updated: 2023/02/07 20:25:26 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -20,58 +20,61 @@
|
|||||||
#include <netinet/in.h> //struct socket
|
#include <netinet/in.h> //struct socket
|
||||||
#include <sys/epoll.h> //epoll ensemble
|
#include <sys/epoll.h> //epoll ensemble
|
||||||
#include <unistd.h> //close()
|
#include <unistd.h> //close()
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#define MAX_EVENTS 5
|
#define MAX_EVENTS 5
|
||||||
#define READ_SIZE 10
|
#define READ_SIZE 10
|
||||||
#define CMD_NBR 10
|
#define CMD_NBR 10
|
||||||
|
|
||||||
//struct functionTab;
|
//struct functionTab;
|
||||||
void ft_test();
|
struct fdList;
|
||||||
|
|
||||||
|
//std::string ft_test();
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* *********************************COMMANDS********************************* */
|
/* *********************************COMMANDS********************************* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
std::string PASS();
|
void PASS(std::string buffer, fdList allFds, int user);
|
||||||
std::string NICK();
|
void NICK(std::string buffer, fdList allFds, int user);
|
||||||
std::string USER();
|
void USER(std::string buffer, fdList allFds, int user);
|
||||||
std::string SERVER();
|
void SERVER(std::string buffer, fdList allFds, int user);
|
||||||
std::string OPER();
|
void OPER(std::string buffer, fdList allFds, int user);
|
||||||
std::string QUIT();
|
void QUIT(std::string buffer, fdList allFds, int user);
|
||||||
std::string SQUIT();
|
void SQUIT(std::string buffer, fdList allFds, int user);
|
||||||
std::string JOIN();
|
void JOIN(std::string buffer, fdList allFds, int user);
|
||||||
std::string PART();
|
void PART(std::string buffer, fdList allFds, int user);
|
||||||
std::string MODE();
|
void MODE(std::string buffer, fdList allFds, int user);
|
||||||
std::string TOPIC();
|
void TOPIC(std::string buffer, fdList allFds, int user);
|
||||||
std::string NAMES();
|
void NAMES(std::string buffer, fdList allFds, int user);
|
||||||
std::string LIST();
|
void LIST(std::string buffer, fdList allFds, int user);
|
||||||
std::string INVITE();
|
void INVITE(std::string buffer, fdList allFds, int user);
|
||||||
std::string KICK();
|
void KICK(std::string buffer, fdList allFds, int user);
|
||||||
std::string VERSION();
|
void VERSION(std::string buffer, fdList allFds, int user);
|
||||||
std::string STATS();
|
void STATS(std::string buffer, fdList allFds, int user);
|
||||||
std::string LINKS();
|
void LINKS(std::string buffer, fdList allFds, int user);
|
||||||
std::string TIME();
|
void TIME(std::string buffer, fdList allFds, int user);
|
||||||
std::string CONNECT();
|
void CONNECT(std::string buffer, fdList allFds, int user);
|
||||||
std::string TRACE();
|
void TRACE(std::string buffer, fdList allFds, int user);
|
||||||
std::string ADMIN();
|
void ADMIN(std::string buffer, fdList allFds, int user);
|
||||||
std::string INFO();
|
void INFO(std::string buffer, fdList allFds, int user);
|
||||||
std::string PRIVMSG();
|
void PRIVMSG(std::string buffer, fdList allFds, int user);
|
||||||
std::string NOTICE();
|
void NOTICE(std::string buffer, fdList allFds, int user);
|
||||||
std::string WHO();
|
void WHO(std::string buffer, fdList allFds, int user);
|
||||||
std::string WHOIS();
|
void WHOIS(std::string buffer, fdList allFds, int user);
|
||||||
std::string WHOWAS();
|
void WHOWAS(std::string buffer, fdList allFds, int user);
|
||||||
std::string KILL();
|
void KILL(std::string buffer, fdList allFds, int user);
|
||||||
std::string PING();
|
void PING(std::string buffer, fdList allFds, int user);
|
||||||
std::string PONG();
|
void PONG(std::string buffer, fdList allFds, int user);
|
||||||
std::string ERROR();
|
void ERROR(std::string buffer, fdList allFds, int user);
|
||||||
std::string AWAY();
|
void AWAY(std::string buffer, fdList allFds, int user);
|
||||||
std::string REHASH();
|
void REHASH(std::string buffer, fdList allFds, int user);
|
||||||
std::string RESTART();
|
void RESTART(std::string buffer, fdList allFds, int user);
|
||||||
std::string SUMMON();
|
void SUMMON(std::string buffer, fdList allFds, int user);
|
||||||
std::string USER();
|
void USER(std::string buffer, fdList allFds, int user);
|
||||||
std::string OPERWALL();
|
void OPERWALL(std::string buffer, fdList allFds, int user);
|
||||||
std::string USERHOST();
|
void USERHOST(std::string buffer, fdList allFds, int user);
|
||||||
std::string ISON();
|
void ISON(std::string buffer, fdList allFds, int user);
|
||||||
|
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
@ -80,7 +83,7 @@ void ft_test();
|
|||||||
|
|
||||||
struct functionTab
|
struct functionTab
|
||||||
{
|
{
|
||||||
static const int cmdNbr = 5;
|
static const int cmdNbr = 40;
|
||||||
std::string cmdName[cmdNbr] =
|
std::string cmdName[cmdNbr] =
|
||||||
{
|
{
|
||||||
//4. Détails des messages
|
//4. Détails des messages
|
||||||
@ -142,64 +145,67 @@ struct functionTab
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void (*cmdPtr[cmdNbr])(void) =
|
//std::string (*cmdPtr[cmdNbr])(void) =
|
||||||
|
void (*cmdPtr[cmdNbr])(std::string buffer, fdList allFds, int user) =
|
||||||
{
|
{
|
||||||
|
//ft_test
|
||||||
|
|
||||||
//4. Détails des messages
|
//4. Détails des messages
|
||||||
|
|
||||||
//4.1 Etablissement de connexion
|
// //4.1 Etablissement de connexion
|
||||||
PASS,
|
// PASS,
|
||||||
NICK,
|
NICK
|
||||||
USER,
|
// USER,
|
||||||
SERVER,
|
// SERVER,
|
||||||
OPER,
|
// OPER,
|
||||||
QUIT,
|
// QUIT,
|
||||||
SQUIT,
|
// SQUIT,
|
||||||
|
|
||||||
//4.2 Opérations sur les canaux
|
// //4.2 Opérations sur les canaux
|
||||||
JOIN,
|
// JOIN,
|
||||||
PART,
|
// PART,
|
||||||
MODE,
|
// MODE,
|
||||||
TOPIC,
|
// TOPIC,
|
||||||
NAMES,
|
// NAMES,
|
||||||
LIST,
|
// LIST,
|
||||||
INVITE,
|
// INVITE,
|
||||||
KICK,
|
// KICK,
|
||||||
|
|
||||||
//4.3 Requêtes et commandes des serveurs
|
// //4.3 Requêtes et commandes des serveurs
|
||||||
VERSION,
|
// VERSION,
|
||||||
STATS,
|
// STATS,
|
||||||
LINKS,
|
// LINKS,
|
||||||
TIME,
|
// TIME,
|
||||||
CONNECT,
|
// CONNECT,
|
||||||
TRACE,
|
// TRACE,
|
||||||
ADMIN,
|
// ADMIN,
|
||||||
INFO,
|
// INFO,
|
||||||
|
|
||||||
//4.4 Envoi de messages
|
// //4.4 Envoi de messages
|
||||||
PRIVMSG,
|
// PRIVMSG,
|
||||||
NOTICE,
|
// NOTICE,
|
||||||
|
|
||||||
//4.5 Requêtes basées sur les utilisateurs
|
// //4.5 Requêtes basées sur les utilisateurs
|
||||||
|
|
||||||
WHO,
|
// WHO,
|
||||||
WHOIS,
|
// WHOIS,
|
||||||
WHOWAS,
|
// WHOWAS,
|
||||||
//4.6 Messages divers
|
// //4.6 Messages divers
|
||||||
|
|
||||||
KILL,
|
// KILL,
|
||||||
PING,
|
// PING,
|
||||||
PONG,
|
// PONG,
|
||||||
ERROR,
|
// ERROR,
|
||||||
|
|
||||||
//5. Messages optionnels
|
// //5. Messages optionnels
|
||||||
AWAY,
|
// AWAY,
|
||||||
REHASH,
|
// REHASH,
|
||||||
RESTART,
|
// RESTART,
|
||||||
SUMMON,
|
// SUMMON,
|
||||||
USER,
|
// USER,
|
||||||
OPERWALL,
|
// OPERWALL,
|
||||||
USERHOST,
|
// USERHOST,
|
||||||
ISON
|
// ISON
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -207,22 +213,49 @@ struct functionTab
|
|||||||
/* *********************************STRUCT*********************************** */
|
/* *********************************STRUCT*********************************** */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
struct channelData;
|
||||||
|
|
||||||
|
struct clientData
|
||||||
|
{
|
||||||
|
bool registered = 0;
|
||||||
|
std::string buf[1024];
|
||||||
|
std::string nickname;
|
||||||
|
std::string password;
|
||||||
|
|
||||||
|
std::string userName;
|
||||||
|
std::string realName;
|
||||||
|
std::string hostName;
|
||||||
|
std::string serverName;
|
||||||
|
|
||||||
|
//std::string joinedChan[20];
|
||||||
|
channelData *joinedChan; //is there a limit?
|
||||||
|
int nbrChan;
|
||||||
|
int perm;
|
||||||
|
int fd;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct channelData
|
||||||
|
{
|
||||||
|
//std::string userList[MAX_EVENTS];
|
||||||
|
clientData userList[MAX_EVENTS];
|
||||||
|
int op;
|
||||||
|
int nbrUser;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct fdList //allFds in code
|
struct fdList //allFds in code
|
||||||
{
|
{
|
||||||
|
struct epoll_event events[MAX_EVENTS];
|
||||||
int epollFd;
|
int epollFd;
|
||||||
int serverFd;
|
int serverFd;
|
||||||
int userList[MAX_EVENTS];
|
int userList[MAX_EVENTS]; //list of user's fd
|
||||||
|
clientData userData[MAX_EVENTS];
|
||||||
int nbrUser;
|
int nbrUser;
|
||||||
functionTab parsingTab;
|
functionTab parsingTab;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct userClient
|
|
||||||
{
|
|
||||||
// int epollFd;
|
|
||||||
// int serverFd;
|
|
||||||
// int userList[MAX_EVENTS];
|
|
||||||
// int nbrUser;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -237,6 +270,8 @@ void close_fd(int fd);
|
|||||||
/* ******************************START SERVER******************************** */
|
/* ******************************START SERVER******************************** */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
void cmd_error(fdList allFds, int user, std::string error);
|
||||||
|
void split(std::string const &str, const char delim, std::vector<std::string> &out);
|
||||||
void initialize(char **av); //1st
|
void initialize(char **av); //1st
|
||||||
void start_loop(fdList allFds); //3rd
|
void start_loop(fdList allFds); //3rd
|
||||||
|
|
||||||
@ -252,11 +287,11 @@ int epoll_start(); //2nd
|
|||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
void new_connection(fdList allFds, struct epoll_event newClient);
|
void new_connection(fdList allFds, struct epoll_event newClient);
|
||||||
bool clientRequest(fdList allFds, int newFd);
|
bool clientRequest(fdList allFds, int user);
|
||||||
|
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* ***************************COMMANDS PARSING******************************* */
|
/* ***************************COMMANDS PARSING******************************* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
void parse_commands(std::string buffer, fdList allFds);
|
void parse_commands(std::string buffer, fdList allFds, int user);
|
||||||
|
|
||||||
|
|||||||
@ -6,21 +6,25 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */
|
/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */
|
||||||
/* Updated: 2023/02/06 12:36:52 by apommier ### ########.fr */
|
/* Updated: 2023/02/07 11:24:51 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "../includes/ft_irc.hpp"
|
#include "../includes/ft_irc.hpp"
|
||||||
|
|
||||||
bool clientRequest(fdList allFds, int clientFd)
|
bool clientRequest(fdList allFds, int user)//,
|
||||||
{
|
{
|
||||||
|
int clientFd = allFds.events[user].data.fd;
|
||||||
char buf[1024] = {0};
|
char buf[1024] = {0};
|
||||||
size_t len = 1024;
|
size_t len = 1024;
|
||||||
|
|
||||||
|
//se demerder pour join quand pas \n
|
||||||
std::cout << "client request!" << std::endl;
|
std::cout << "client request!" << std::endl;
|
||||||
if (recv(clientFd, buf, len, 0) == -1)
|
if (recv(clientFd, buf, len, 0) == -1)
|
||||||
ft_error("recv() error");
|
ft_error("recv() error");
|
||||||
std::cout << "BUFFER: ---" << buf << "---" << std::endl;
|
std::cout << "BUFFER: ---" << buf << "---" << std::endl;
|
||||||
parse_commands(buf, allFds);
|
|
||||||
|
//split with \n and while (tab de split) -> parsing
|
||||||
|
parse_commands(buf, allFds, user);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
@ -6,13 +6,21 @@
|
|||||||
/* 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/06 14:28:55 by apommier ### ########.fr */
|
/* Updated: 2023/02/07 15:13:27 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "../../includes/ft_irc.hpp"
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
void NICK()
|
// ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME
|
||||||
|
// ERR_NICKNAMEINUSE ERR_NICKCOLLISION
|
||||||
|
|
||||||
|
void NICK(std::string buffer, fdList allFds, int user)
|
||||||
{
|
{
|
||||||
|
std::vector<std::string> splitBuff;
|
||||||
|
|
||||||
|
split(buffer, ' ', splitBuff);
|
||||||
|
//if nickname ok then (another user has it? )
|
||||||
|
allFds.userData[user].nickname = splitBuff[1];
|
||||||
|
return ;
|
||||||
}
|
}
|
||||||
@ -6,13 +6,33 @@
|
|||||||
/* 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/06 14:41:12 by apommier ### ########.fr */
|
/* Updated: 2023/02/07 19:40:34 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "../../includes/ft_irc.hpp"
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
void PASS()
|
void PASS(std::string buffer, fdList allFds, int user)
|
||||||
{
|
{
|
||||||
|
std::string password;
|
||||||
|
|
||||||
|
if (buffer.size() < 6)// ---PASS ---
|
||||||
|
{
|
||||||
|
cmd_error(allFds, user, "461 * PASS :Not enough parameters");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (splitBuff.size() != 2)
|
||||||
|
// {
|
||||||
|
// cmd_error(allFds, user, "461 * PASS :Not enough parameters");
|
||||||
|
// //write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
|
||||||
|
// return ;
|
||||||
|
// }
|
||||||
|
else if (allFds.userData[user].registered)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, user, "462 * PASS :You may not reregister");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
password = buffer.substr(5, buffer.npos);
|
||||||
|
allFds.userData[user].password = buffer;
|
||||||
}
|
}
|
||||||
40
srcs/commands/auth/user.cpp
Normal file
40
srcs/commands/auth/user.cpp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* user.cpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2023/02/06 14:40:39 by apommier #+# #+# */
|
||||||
|
/* Updated: 2023/02/07 20:27:12 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
//Commande: USER
|
||||||
|
//Paramètres: <nom d'utilisateur> <hôte> <nom de serveur> :<nom réel>
|
||||||
|
//ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
|
||||||
|
|
||||||
|
void USER(std::string buffer, fdList allFds, int user)
|
||||||
|
{
|
||||||
|
std::string realName = buffer.substr(buffer.find_first_of(":") + 1 , buffer.npos);
|
||||||
|
std::vector<std::string> splitBuff;
|
||||||
|
|
||||||
|
buffer.resize(buffer.size() - realName.size());
|
||||||
|
std::cout << "Buffer in user = ---" << buffer << "---" << std::endl;
|
||||||
|
std::cout << "realname in user = ---" << realName << "---" << std::endl;
|
||||||
|
split(buffer, ' ', splitBuff);
|
||||||
|
if (splitBuff.size() < 4)
|
||||||
|
{
|
||||||
|
cmd_error(allFds, user, "461 * PASS :Not enough parameters");
|
||||||
|
//write(allFds.userData[user].fd, "ERR_NEEDMOREPARAMS", 18);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
allFds.userData[user].userName = splitBuff[1];
|
||||||
|
allFds.userData[user].hostName = splitBuff[2];
|
||||||
|
allFds.userData[user].serverName = splitBuff[3];
|
||||||
|
|
||||||
|
allFds.userData[user].realName = realName;
|
||||||
|
|
||||||
|
}
|
||||||
31
srcs/commands/auth/utils.cpp
Normal file
31
srcs/commands/auth/utils.cpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* utils.cpp :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2023/02/07 14:45:45 by apommier #+# #+# */
|
||||||
|
/* Updated: 2023/02/07 15:16:10 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
|
void cmd_error(fdList allFds, int user, std::string error)
|
||||||
|
{
|
||||||
|
write(allFds.userData[user].fd, ":irc.local ", error.size());
|
||||||
|
write(allFds.userData[user].fd, error.c_str(), error.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
void split(std::string const &str, const char delim, std::vector<std::string> &out)
|
||||||
|
{
|
||||||
|
size_t start;
|
||||||
|
size_t end = 0;
|
||||||
|
|
||||||
|
while ((start = str.find_first_not_of(delim, end)) != std::string::npos)
|
||||||
|
{
|
||||||
|
end = str.find(delim, start);
|
||||||
|
out.push_back(str.substr(start, end - start));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -6,28 +6,33 @@
|
|||||||
/* 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/06 12:39:13 by apommier ### ########.fr */
|
/* Updated: 2023/02/07 15:18:41 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "../../includes/ft_irc.hpp"
|
#include "../../includes/ft_irc.hpp"
|
||||||
|
|
||||||
void ft_test()
|
std::string ft_test()
|
||||||
{
|
{
|
||||||
std::cout << "hehe je suis la" << std::endl;
|
std::cout << "hehe je suis la" << std::endl;
|
||||||
|
return ("prout");
|
||||||
}
|
}
|
||||||
|
|
||||||
void parse_commands(std::string buffer, fdList allFds)
|
void parse_commands(std::string buffer, fdList allFds, int user)
|
||||||
{
|
{
|
||||||
std::string cmd = buffer;
|
std::string cmd = buffer;
|
||||||
|
std::vector<std::string> splitBuff;
|
||||||
int a = 0;
|
int a = 0;
|
||||||
|
|
||||||
cmd.pop_back();
|
cmd.pop_back();
|
||||||
|
|
||||||
|
split(cmd, ' ', splitBuff);
|
||||||
|
|
||||||
std::cout << "BUFFER In PARSING: ---" << cmd << "---" << std::endl;
|
std::cout << "BUFFER In PARSING: ---" << cmd << "---" << std::endl;
|
||||||
while (cmd != allFds.parsingTab.cmdName[a] && a < allFds.parsingTab.cmdNbr)
|
while (splitBuff[0] != allFds.parsingTab.cmdName[a] && a < allFds.parsingTab.cmdNbr)
|
||||||
a++;
|
a++;
|
||||||
if (a == allFds.parsingTab.cmdNbr)
|
if (a == allFds.parsingTab.cmdNbr)
|
||||||
std::cout << "Command not found\n";
|
std::cout << "Command not found\n";
|
||||||
else
|
else
|
||||||
allFds.parsingTab.cmdPtr[a]();
|
allFds.parsingTab.cmdPtr[a](buffer, allFds, user);
|
||||||
}
|
}
|
||||||
@ -1,18 +0,0 @@
|
|||||||
/* ************************************************************************** */
|
|
||||||
/* */
|
|
||||||
/* ::: :::::::: */
|
|
||||||
/* user.cpp :+: :+: :+: */
|
|
||||||
/* +:+ +:+ +:+ */
|
|
||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
|
||||||
/* +#+#+#+#+#+ +#+ */
|
|
||||||
/* Created: 2023/02/06 14:40:39 by apommier #+# #+# */
|
|
||||||
/* Updated: 2023/02/06 14:41:03 by apommier ### ########.fr */
|
|
||||||
/* */
|
|
||||||
/* ************************************************************************** */
|
|
||||||
|
|
||||||
#include "../../includes/ft_irc.hpp"
|
|
||||||
|
|
||||||
void USER()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/12/09 22:26:27 by apommier #+# #+# */
|
/* Created: 2022/12/09 22:26:27 by apommier #+# #+# */
|
||||||
/* Updated: 2022/12/18 12:13:28 by apommier ### ########.fr */
|
/* Updated: 2023/02/07 11:41:38 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -21,6 +21,9 @@ void new_connection(fdList allFds, struct epoll_event newClient)
|
|||||||
if (MAX_EVENTS == allFds.nbrUser)
|
if (MAX_EVENTS == allFds.nbrUser)
|
||||||
std::cout << "new connection refused, already full" << std::endl;
|
std::cout << "new connection refused, already full" << std::endl;
|
||||||
allFds.userList[allFds.nbrUser] = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
|
allFds.userList[allFds.nbrUser] = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
|
||||||
|
|
||||||
|
allFds.userData[allFds.nbrUser].fd = allFds.userList[allFds.nbrUser];
|
||||||
|
|
||||||
epoll_add(allFds.epollFd, allFds.userList[allFds.nbrUser]);
|
epoll_add(allFds.epollFd, allFds.userList[allFds.nbrUser]);
|
||||||
allFds.nbrUser++;
|
allFds.nbrUser++;
|
||||||
}
|
}
|
||||||
@ -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/06 12:33:21 by apommier ### ########.fr */
|
/* Updated: 2023/02/07 11:23:01 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -16,11 +16,12 @@ void start_loop(fdList allFds)
|
|||||||
{
|
{
|
||||||
bool alive = true;
|
bool alive = true;
|
||||||
char buffer[1024] = { 0 };
|
char buffer[1024] = { 0 };
|
||||||
struct epoll_event events[MAX_EVENTS];
|
//struct epoll_event events[MAX_EVENTS];
|
||||||
int readChar;
|
int readChar;
|
||||||
int eventNbr;
|
int eventNbr;
|
||||||
|
|
||||||
std::cout << "serverFd: " << allFds.serverFd << std::endl;
|
std::cout << "serverFd: " << allFds.serverFd << std::endl;
|
||||||
|
//allFds.events //= allFds.events;
|
||||||
while (alive)
|
while (alive)
|
||||||
{
|
{
|
||||||
// std::cout << "hehe\n";
|
// std::cout << "hehe\n";
|
||||||
@ -30,14 +31,14 @@ void start_loop(fdList allFds)
|
|||||||
|
|
||||||
// send(clientFd, "message received", 18, 0);
|
// send(clientFd, "message received", 18, 0);
|
||||||
|
|
||||||
eventNbr = epoll_wait(allFds.epollFd, events, MAX_EVENTS, 5000);
|
eventNbr = epoll_wait(allFds.epollFd, allFds.events, MAX_EVENTS, 5000);
|
||||||
std::cout << "eventNbr: " << eventNbr << std::endl;
|
std::cout << "eventNbr: " << eventNbr << std::endl;
|
||||||
for (int i = 0; i < eventNbr ; i++)
|
for (int i = 0; i < eventNbr ; i++)
|
||||||
{
|
{
|
||||||
std::cout << "event[i]'s fd: " << events[i].data.fd << std::endl;
|
std::cout << "event[i]'s fd: " << allFds.events[i].data.fd << std::endl;
|
||||||
if (events[i].data.fd == allFds.serverFd)
|
if (allFds.events[i].data.fd == allFds.serverFd)
|
||||||
new_connection(allFds, events[i]);
|
new_connection(allFds, allFds.events[i]);
|
||||||
else if (!clientRequest(allFds, events[i].data.fd))
|
else if (!clientRequest(allFds, i))//allFds.events[i].data.fd))
|
||||||
{
|
{
|
||||||
alive = false;
|
alive = false;
|
||||||
//else
|
//else
|
||||||
@ -48,7 +49,6 @@ void start_loop(fdList allFds)
|
|||||||
}
|
}
|
||||||
if (!strncmp("/quit", buffer, 5))
|
if (!strncmp("/quit", buffer, 5))
|
||||||
std::cout << "quit message received\n";
|
std::cout << "quit message received\n";
|
||||||
|
|
||||||
}
|
}
|
||||||
std::cout << "dead server\n";
|
std::cout << "dead server\n";
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user