diff --git a/Makefile b/Makefile index a6aeaee..9908d33 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/12/01 17:27:29 by apommier #+# #+# # -# Updated: 2022/12/06 22:07:24 by apommier ### ########.fr # +# Updated: 2022/12/09 23:21:35 by apommier ### ########.fr # # # # **************************************************************************** # @@ -15,10 +15,13 @@ SRCS := main.cpp\ epoll.cpp\ start_server.cpp\ utils.cpp\ + client_request.cpp\ + new_connection.cpp\ server_loop.cpp CC = c++ -#FLAGS = -g -Wall -Wextra -Werror +FLAGS = -g +#-Wall -Wextra -Werror DIR_OBJ := obj DIR_INC = -I ./includes/ DIR_SRCS := ./srcs diff --git a/includes/ft_irc.hpp b/includes/ft_irc.hpp index 557c36a..831d680 100644 --- a/includes/ft_irc.hpp +++ b/includes/ft_irc.hpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/01 17:27:37 by apommier #+# #+# */ -/* Updated: 2022/12/06 22:06:07 by apommier ### ########.fr */ +/* Updated: 2022/12/09 23:18:30 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,6 +21,17 @@ #include //epoll ensemble #include //close() +#define MAX_EVENTS 5 +#define READ_SIZE 10 + +struct fdList +{ + int epollFd; + int serverFd; + int userList[MAX_EVENTS]; + int nbrUser; +}; + /* ************************************************************************** */ /* *********************************UTILS************************************ */ /* ************************************************************************** */ @@ -33,11 +44,18 @@ void close_fd(int fd); /* ************************************************************************** */ void initialize(char **av); //1st -void start_loop(int epollFd, int oldSock, int newSock); //3rd +void start_loop(fdList allFds); //3rd /* ************************************************************************** */ /* *****************************EPOLL UTILITY******************************** */ /* ************************************************************************** */ void epoll_add(int epollFd, int fd); -int epoll_start(); //2nd \ No newline at end of file +int epoll_start(); //2nd + +/* ************************************************************************** */ +/* *****************************EPOLL UTILITY******************************** */ +/* ************************************************************************** */ + +void new_connection(struct epoll_event newClient); +bool clientRequest(fdList allFds, int newFd); \ No newline at end of file diff --git a/srcs/client_request.cpp b/srcs/client_request.cpp new file mode 100644 index 0000000..d87d81e --- /dev/null +++ b/srcs/client_request.cpp @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* client_request.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */ +/* Updated: 2022/12/09 23:18:46 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/ft_irc.hpp" + +bool clientRequest(fdList allFds, int newFd) +{ + std::cout << "client request!" << std::endl; + return (1); +} \ No newline at end of file diff --git a/srcs/main.cpp b/srcs/main.cpp index ed67e94..d9510f6 100644 --- a/srcs/main.cpp +++ b/srcs/main.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/01 17:27:33 by apommier #+# #+# */ -/* Updated: 2022/12/06 21:50:25 by apommier ### ########.fr */ +/* Updated: 2022/12/09 23:46:24 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,6 +16,7 @@ int main(int ac, char **av) { if (!(ac == 3 || ac == 2)) ft_error("wrong number of arguments\nFORMAT: ./ircserv "); + std::cout << "============Homemade IRC Server start============" << std::endl; initialize(av); return (0); } \ No newline at end of file diff --git a/srcs/main2.cpp b/srcs/main2.cpp deleted file mode 100644 index e063dda..0000000 --- a/srcs/main2.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// Server side C/C++ program to demonstrate Socket -// programming -#include -#include -#include -#include -#include -#include -#include -#define PORT 8080 -int main(int argc, char const* argv[]) -{ - int server_fd, new_socket, valread; - struct sockaddr_in address; - int opt = 1; - int addrlen = sizeof(address); - char buffer[1024] = { 0 }; - const char* hello = "Hello from server"; - - // Creating socket file descriptor - if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { - perror("socket failed"); - exit(EXIT_FAILURE); - } - - // Forcefully attaching socket to the port 8080 - if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) - { - perror("setsockopt"); - exit(EXIT_FAILURE); - } - - std::cout << PORT << std::endl; - address.sin_family = AF_INET; - address.sin_addr.s_addr = INADDR_ANY; - address.sin_port = htons(PORT); - - // Forcefully attaching socket to the port 8080 - if (bind(server_fd, (struct sockaddr*)&address, - sizeof(address)) - < 0) { - perror("bind failed"); - exit(EXIT_FAILURE); - } - if (listen(server_fd, 3) < 0) { - perror("listen"); - exit(EXIT_FAILURE); - } - if ((new_socket - = accept(server_fd, (struct sockaddr*)&address, - (socklen_t*)&addrlen)) - < 0) { - perror("accept"); - exit(EXIT_FAILURE); - } - // valread = read(new_socket, buffer, 1024); - // printf("%s\n", buffer); - // send(new_socket, hello, strlen(hello), 0); - // printf("Hello message sent\n"); - - // // closing the connected socket - // close(new_socket); - // // closing the listening socket - // shutdown(server_fd, SHUT_RDWR); - return 0; -} diff --git a/srcs/new_connection.cpp b/srcs/new_connection.cpp new file mode 100644 index 0000000..227345a --- /dev/null +++ b/srcs/new_connection.cpp @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* new_connection.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/12/09 22:26:27 by apommier #+# #+# */ +/* Updated: 2022/12/09 22:38:40 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../includes/ft_irc.hpp" + +void new_connection(struct epoll_event newClient) +{ + std::cout << "new connection !" << std::endl; +} \ No newline at end of file diff --git a/srcs/server_loop.cpp b/srcs/server_loop.cpp index ffb88c1..832194b 100644 --- a/srcs/server_loop.cpp +++ b/srcs/server_loop.cpp @@ -6,34 +6,41 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 21:58:13 by apommier #+# #+# */ -/* Updated: 2022/12/07 01:16:41 by apommier ### ########.fr */ +/* Updated: 2022/12/09 23:56:24 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ #include "../includes/ft_irc.hpp" -#define MAX_EVENTS 5 -#define READ_SIZE 10 - -void start_loop(int epollFd, int oldSock, int newSock) +void start_loop(fdList allFds) { + bool alive = true; char buffer[1024] = { 0 }; + struct epoll_event events[MAX_EVENTS]; int readChar; + int eventNbr; - std::cout << "loop start\n"; - while (strncmp("/quit", buffer, 5)) + while (alive) { // std::cout << "hehe\n"; - readChar = read(newSock, buffer, 1024); - buffer[readChar] = '\0'; - std::cout << "buffer: " << buffer << std::endl; - // send(newSock, "message received", 18, 0); + // readChar = read(allFds.serverFd, buffer, 1024); + //recv(int allFds.serverFd, void *buf, size_t len, int flags); + //buffer[readChar] = '\0'; + std::cout << "serverFd: " << allFds.serverFd << std::endl; + // send(clientFd, "message received", 18, 0); - //event_count = epoll_wait(epoll_fd, events, MAX_EVENTS, 30000); - //for (i = 0; i < event_count; i++) - //{ - - //} + eventNbr = epoll_wait(allFds.epollFd, events, MAX_EVENTS, 5000); + std::cout << "eventNbr: " << eventNbr << std::endl; + for (int i = 0; i < eventNbr; i++) + { + std::cout << "event[i]'s fd: " << events[i].data.fd << std::endl; + if (events[i].data.fd == allFds.serverFd) + new_connection(events[i]); + else if (!clientRequest(allFds, events[i].data.fd)) + alive = false; + //if (strncmp("QUIT", buffer, 4)) + // alive = 0; + } } if (!strncmp("/quit", buffer, 5)) { diff --git a/srcs/start_server.cpp b/srcs/start_server.cpp index f1d7303..dcc2788 100644 --- a/srcs/start_server.cpp +++ b/srcs/start_server.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 21:44:20 by apommier #+# #+# */ -/* Updated: 2022/12/07 01:25:31 by apommier ### ########.fr */ +/* Updated: 2022/12/09 23:57:24 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,17 +14,18 @@ void initialize(char **av) { - int sockFd; - int epollFd; - int newSockFd = 0; + //int allFds.serverFd; + //int epollFd; + //int newSockFd = 0; int opt = 1; struct sockaddr_in addr; int addrLen = sizeof(addr); + fdList allFds; - sockFd = socket(AF_INET, SOCK_STREAM, 0); - if (sockFd == -1) + allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0); + if (allFds.serverFd == -1) ft_error("socket() error"); - if (setsockopt(sockFd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) + if (setsockopt(allFds.serverFd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) ft_error("setsockopt() error"); addr.sin_port = htons(atoi(av[1])); @@ -33,26 +34,25 @@ void initialize(char **av) if (addr.sin_port <= 0) ft_error("wrong format for \nneed to be an positive integer"); - if (bind(sockFd, (struct sockaddr *)&addr, sizeof(addr)) < 0) + if (bind(allFds.serverFd, (struct sockaddr *)&addr, sizeof(addr)) < 0) ft_error("bind() error"); - if (listen(sockFd, 100) == -1) + if (listen(allFds.serverFd, 100) == -1) ft_error("listen() error"); - newSockFd = accept(sockFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen); - if (newSockFd == -1) - ft_error("accept() error"); + + // newSockFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen); + // if (newSockFd == -1) + // ft_error("accept() error"); - char buffer[1024]; - int nbrRead; - while (strncmp("/quit", buffer, 5)) - { - nbrRead = read() - } - - - epollFd = epoll_start(); - epoll_add(epollFd, newSockFd); - start_loop(epollFd, sockFd, newSockFd); + // char buffer[1024]; + // int nbrRead; + // while (strncmp("/quit", buffer, 5)) + // { + // nbrRead = read() + // } + allFds.epollFd = epoll_start(); + epoll_add(allFds.epollFd, allFds.serverFd); + start_loop(allFds); //send(newSockFd, "hello", 5, 0); } \ No newline at end of file diff --git a/tcpdump/Dockerfile b/tcpdump/Dockerfile new file mode 100644 index 0000000..58a384b --- /dev/null +++ b/tcpdump/Dockerfile @@ -0,0 +1,11 @@ +from debian:11 + +run apt-get update && apt-get upgrade -y \ +&& apt-get install -y openssl vim iproute2 tcpdump inspircd \ +&& mkdir /var/run/inspircd + +COPY ./irc_conf /etc/inspircd + +expose 6667 + +cmd inspircd --runasroot ; tail -f diff --git a/tcpdump/irc_conf/inspircd.conf b/tcpdump/irc_conf/inspircd.conf new file mode 100644 index 0000000..b105065 --- /dev/null +++ b/tcpdump/irc_conf/inspircd.conf @@ -0,0 +1,106 @@ +# This is just a more or less working example configuration file, please +# customize it for your needs! +# +# Once more: Please see the examples in /usr/share/doc/inspircd/examples/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tcpdump/irc_conf/inspircd.motd b/tcpdump/irc_conf/inspircd.motd new file mode 100644 index 0000000..279bcf1 --- /dev/null +++ b/tcpdump/irc_conf/inspircd.motd @@ -0,0 +1,6 @@ ++---------------------------------------------------+ +| z I R C o n | ++---------------------------------------------------+ +Sitio's testing server + +GTFO if not invited diff --git a/tcpdump/launch_tcpdump.sh b/tcpdump/launch_tcpdump.sh new file mode 100644 index 0000000..6d403d6 --- /dev/null +++ b/tcpdump/launch_tcpdump.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +IMAGE_NAME="ttt" +CONTAINER_NAME=$IMAGE_NAME + +docker build ./ -t $IMAGE_NAME +docker images +docker ps -a +docker run -d -p 6667:6667 --name $CONTAINER_NAME $IMAGE_NAME +docker exec -it $CONTAINER_NAME tcpdump -Aqq port 6667 + diff --git a/tcpdump/log.txt b/tcpdump/log.txt new file mode 100644 index 0000000..97b41df --- /dev/null +++ b/tcpdump/log.txt @@ -0,0 +1 @@ +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 diff --git a/tcpdump/main.c b/tcpdump/main.c new file mode 100644 index 0000000..2505746 --- /dev/null +++ b/tcpdump/main.c @@ -0,0 +1,11 @@ + #include + +int main () +{ +ssize_t i = 0; + +i = send(2222, "hello", 6, 0); + +return (i); + +} diff --git a/tcpdump/main.cpp b/tcpdump/main.cpp new file mode 100644 index 0000000..1e97ef9 --- /dev/null +++ b/tcpdump/main.cpp @@ -0,0 +1,20 @@ +#include +#include +#include + + +void print(std::string c) +{ + if (c == "") + std::cout << "NULL" << std::endl; + std::cout << c << std::endl; +} +int main() +{ + + std::vector vec; + + vec.insert(vec.begin(), "bonjour"); + print(vec[3]); + return 0; +}