parsing start

This commit is contained in:
kinou-p 2023-02-07 03:35:45 +01:00
parent 3a42e864c6
commit 4bc54b29d7
12 changed files with 362 additions and 27 deletions

View File

@ -6,7 +6,7 @@
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ # # By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2022/12/01 17:27:29 by apommier #+# #+# # # Created: 2022/12/01 17:27:29 by apommier #+# #+# #
# Updated: 2022/12/09 23:21:35 by apommier ### ########.fr # # Updated: 2022/12/20 23:31:36 by apommier ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
@ -17,7 +17,8 @@ SRCS := main.cpp\
utils.cpp\ utils.cpp\
client_request.cpp\ client_request.cpp\
new_connection.cpp\ new_connection.cpp\
server_loop.cpp server_loop.cpp\
commands/parse_commands.cpp
CC = c++ CC = c++
FLAGS = -g FLAGS = -g

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:37 by apommier #+# #+# */ /* Created: 2022/12/01 17:27:37 by apommier #+# #+# */
/* Updated: 2022/12/09 23:18:30 by apommier ### ########.fr */ /* Updated: 2023/02/06 15:10:08 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -23,15 +23,209 @@
#define MAX_EVENTS 5 #define MAX_EVENTS 5
#define READ_SIZE 10 #define READ_SIZE 10
#define CMD_NBR 10
struct fdList //struct functionTab;
void ft_test();
/* ************************************************************************** */
/* *********************************COMMANDS********************************* */
/* ************************************************************************** */
std::string PASS();
std::string NICK();
std::string USER();
std::string SERVER();
std::string OPER();
std::string QUIT();
std::string SQUIT();
std::string JOIN();
std::string PART();
std::string MODE();
std::string TOPIC();
std::string NAMES();
std::string LIST();
std::string INVITE();
std::string KICK();
std::string VERSION();
std::string STATS();
std::string LINKS();
std::string TIME();
std::string CONNECT();
std::string TRACE();
std::string ADMIN();
std::string INFO();
std::string PRIVMSG();
std::string NOTICE();
std::string WHO();
std::string WHOIS();
std::string WHOWAS();
std::string KILL();
std::string PING();
std::string PONG();
std::string ERROR();
std::string AWAY();
std::string REHASH();
std::string RESTART();
std::string SUMMON();
std::string USER();
std::string OPERWALL();
std::string USERHOST();
std::string ISON();
/* ************************************************************************** */
/* *****************************COMMAND STRUCT******************************* */
/* ************************************************************************** */
struct functionTab
{
static const int cmdNbr = 5;
std::string cmdName[cmdNbr] =
{
//4. Détails des messages
//4.1 Etablissement de connexion
"PASS",
"NICK",
"USER",
"SERVER",
"OPER",
"QUIT",
"SQUIT",
//4.2 Opérations sur les canaux
"JOIN",
"PART",
"MODE",
"TOPIC",
"NAMES",
"LIST",
"INVITE",
"KICK",
//4.3 Requêtes et commandes des serveurs
"VERSION",
"STATS",
"LINKS",
"TIME",
"CONNECT",
"TRACE",
"ADMIN",
"INFO",
//4.4 Envoi de messages
"PRIVMSG",
"NOTICE",
//4.5 Requêtes basées sur les utilisateurs
"WHO",
"WHOIS",
"WHOWAS",
//4.6 Messages divers
"KILL",
"PING",
"PONG",
"ERROR",
//5. Messages optionnels
"AWAY",
"REHASH",
"RESTART",
"SUMMON",
"USER",
"OPERWALL",
"USERHOST",
"ISON"
};
void (*cmdPtr[cmdNbr])(void) =
{
//4. Détails des messages
//4.1 Etablissement de connexion
PASS,
NICK,
USER,
SERVER,
OPER,
QUIT,
SQUIT,
//4.2 Opérations sur les canaux
JOIN,
PART,
MODE,
TOPIC,
NAMES,
LIST,
INVITE,
KICK,
//4.3 Requêtes et commandes des serveurs
VERSION,
STATS,
LINKS,
TIME,
CONNECT,
TRACE,
ADMIN,
INFO,
//4.4 Envoi de messages
PRIVMSG,
NOTICE,
//4.5 Requêtes basées sur les utilisateurs
WHO,
WHOIS,
WHOWAS,
//4.6 Messages divers
KILL,
PING,
PONG,
ERROR,
//5. Messages optionnels
AWAY,
REHASH,
RESTART,
SUMMON,
USER,
OPERWALL,
USERHOST,
ISON
};
};
/* ************************************************************************** */
/* *********************************STRUCT*********************************** */
/* ************************************************************************** */
struct fdList //allFds in code
{ {
int epollFd; int epollFd;
int serverFd; int serverFd;
int userList[MAX_EVENTS]; int userList[MAX_EVENTS];
int nbrUser; int nbrUser;
functionTab parsingTab;
}; };
struct userClient
{
// int epollFd;
// int serverFd;
// int userList[MAX_EVENTS];
// int nbrUser;
};
/* ************************************************************************** */ /* ************************************************************************** */
/* *********************************UTILS************************************ */ /* *********************************UTILS************************************ */
/* ************************************************************************** */ /* ************************************************************************** */
@ -54,8 +248,15 @@ void epoll_add(int epollFd, int fd);
int epoll_start(); //2nd int epoll_start(); //2nd
/* ************************************************************************** */ /* ************************************************************************** */
/* *****************************EPOLL UTILITY******************************** */ /* *************************CONNECTION AND REQUEST*************************** */
/* ************************************************************************** */ /* ************************************************************************** */
void new_connection(struct epoll_event newClient); void new_connection(fdList allFds, struct epoll_event newClient);
bool clientRequest(fdList allFds, int newFd); bool clientRequest(fdList allFds, int newFd);
/* ************************************************************************** */
/* ***************************COMMANDS PARSING******************************* */
/* ************************************************************************** */
void parse_commands(std::string buffer, fdList allFds);

View File

@ -6,14 +6,21 @@
/* 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: 2022/12/09 23:18:46 by apommier ### ########.fr */ /* Updated: 2023/02/06 12:36:52 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../includes/ft_irc.hpp" #include "../includes/ft_irc.hpp"
bool clientRequest(fdList allFds, int newFd) bool clientRequest(fdList allFds, int clientFd)
{ {
char buf[1024] = {0};
size_t len = 1024;
std::cout << "client request!" << std::endl; std::cout << "client request!" << std::endl;
if (recv(clientFd, buf, len, 0) == -1)
ft_error("recv() error");
std::cout << "BUFFER: ---" << buf << "---" << std::endl;
parse_commands(buf, allFds);
return (1); return (1);
} }

18
srcs/commands/nick.cpp Normal file
View File

@ -0,0 +1,18 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* nick.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:28:38 by apommier #+# #+# */
/* Updated: 2023/02/06 14:28:55 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../includes/ft_irc.hpp"
void NICK()
{
}

View File

@ -6,7 +6,28 @@
/* 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: 2022/12/06 22:01:26 by apommier ### ########.fr */ /* Updated: 2023/02/06 12:39:13 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../../includes/ft_irc.hpp"
void ft_test()
{
std::cout << "hehe je suis la" << std::endl;
}
void parse_commands(std::string buffer, fdList allFds)
{
std::string cmd = buffer;
int a = 0;
cmd.pop_back();
std::cout << "BUFFER In PARSING: ---" << cmd << "---" << std::endl;
while (cmd != allFds.parsingTab.cmdName[a] && a < allFds.parsingTab.cmdNbr)
a++;
if (a == allFds.parsingTab.cmdNbr)
std::cout << "Command not found\n";
else
allFds.parsingTab.cmdPtr[a]();
}

18
srcs/commands/pass.cpp Normal file
View File

@ -0,0 +1,18 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* pass.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 14:40:42 by apommier #+# #+# */
/* Updated: 2023/02/06 14:41:12 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../includes/ft_irc.hpp"
void PASS()
{
}

18
srcs/commands/user.cpp Normal file
View File

@ -0,0 +1,18 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* 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()
{
}

View File

@ -6,13 +6,21 @@
/* 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/09 22:38:40 by apommier ### ########.fr */ /* Updated: 2022/12/18 12:13:28 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../includes/ft_irc.hpp" #include "../includes/ft_irc.hpp"
void new_connection(struct epoll_event newClient) void new_connection(fdList allFds, struct epoll_event newClient)
{ {
struct sockaddr_in addr;
int addrLen = sizeof(addr);
std::cout << "new connection !" << std::endl; std::cout << "new connection !" << std::endl;
if (MAX_EVENTS == allFds.nbrUser)
std::cout << "new connection refused, already full" << std::endl;
allFds.userList[allFds.nbrUser] = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
epoll_add(allFds.epollFd, allFds.userList[allFds.nbrUser]);
allFds.nbrUser++;
} }

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:58:13 by apommier #+# #+# */ /* Created: 2022/12/06 21:58:13 by apommier #+# #+# */
/* Updated: 2022/12/09 23:56:24 by apommier ### ########.fr */ /* Updated: 2023/02/06 12:33:21 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -20,30 +20,36 @@ void start_loop(fdList allFds)
int readChar; int readChar;
int eventNbr; int eventNbr;
std::cout << "serverFd: " << allFds.serverFd << std::endl;
while (alive) while (alive)
{ {
// std::cout << "hehe\n"; // std::cout << "hehe\n";
// readChar = read(allFds.serverFd, buffer, 1024); // readChar = read(allFds.serverFd, buffer, 1024);
//recv(int allFds.serverFd, void *buf, size_t len, int flags); //recv(int allFds.serverFd, void *buf, size_t len, int flags);
//buffer[readChar] = '\0'; //buffer[readChar] = '\0';
std::cout << "serverFd: " << allFds.serverFd << std::endl;
// 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, 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: " << events[i].data.fd << std::endl;
if (events[i].data.fd == allFds.serverFd) if (events[i].data.fd == allFds.serverFd)
new_connection(events[i]); new_connection(allFds, events[i]);
else if (!clientRequest(allFds, events[i].data.fd)) else if (!clientRequest(allFds, events[i].data.fd))
{
alive = false; alive = false;
//else
// std::cout << "F*CK i dont know" << std::endl;
//if (strncmp("QUIT", buffer, 4)) //if (strncmp("QUIT", buffer, 4))
// alive = 0; // alive = 0;
} }
} }
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";
} }

View File

@ -6,12 +6,18 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:44:20 by apommier #+# #+# */ /* Created: 2022/12/06 21:44:20 by apommier #+# #+# */
/* Updated: 2022/12/09 23:57:24 by apommier ### ########.fr */ /* Updated: 2023/02/06 12:32:07 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../includes/ft_irc.hpp" #include "../includes/ft_irc.hpp"
// void initialize_function_ptr(fdList allFds)
// {
// // int i = 0;
// // for (i = 0; i < allFds.parsingTab.cmdNbr, i++)
// }
void initialize(char **av) void initialize(char **av)
{ {
//int allFds.serverFd; //int allFds.serverFd;
@ -22,6 +28,7 @@ void initialize(char **av)
int addrLen = sizeof(addr); int addrLen = sizeof(addr);
fdList allFds; fdList allFds;
allFds.nbrUser = 0;
allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0); allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0);
if (allFds.serverFd == -1) if (allFds.serverFd == -1)
ft_error("socket() error"); ft_error("socket() error");

31
tcpdump/Makefile Normal file
View File

@ -0,0 +1,31 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2022/08/12 01:38:24 by apommier #+# #+# #
# Updated: 2022/12/16 01:47:58 by apommier ### ########.fr #
# #
# **************************************************************************** #
all:
bash launch_tcpdump.sh
# docker-compose -f ./srcs/docker-compose.yml up --build
fclean:
-docker rm $$(docker ps -qa)
-docker rmi -f $$(docker images -qa)
-docker volume rm $$(docker volume ls -q)
-docker network rm $$(docker network ls -q)
# up:
# docker-compose -f ./srcs/docker-compose.yml up
# back:
# docker-compose -f ./srcs/docker-compose.yml up --build -d
# down:
# docker-compose -f ./srcs/docker-compose.yml down
re: fclean all

View File

@ -8,4 +8,3 @@ docker images
docker ps -a docker ps -a
docker run -d -p 6667:6667 --name $CONTAINER_NAME $IMAGE_NAME docker run -d -p 6667:6667 --name $CONTAINER_NAME $IMAGE_NAME
docker exec -it $CONTAINER_NAME tcpdump -Aqq port 6667 docker exec -it $CONTAINER_NAME tcpdump -Aqq port 6667