diff --git a/Makefile b/Makefile index 242b67d..7e513c4 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/12/01 17:27:29 by apommier #+# #+# # -# Updated: 2023/02/14 22:21:45 by apommier ### ########.fr # +# Updated: 2023/02/15 17:14:51 by apommier ### ########.fr # # # # **************************************************************************** # @@ -44,6 +44,7 @@ SRCS := main.cpp\ \ commands/operator/squit.cpp\ commands/operator/oper.cpp\ + commands/operator/kill.cpp\ \ commands/not_done_cmd.cpp #special (temporary) diff --git a/includes/ft_irc.hpp b/includes/ft_irc.hpp index ce5229c..4389ec4 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: 2023/02/15 00:16:02 by apommier ### ########.fr */ +/* Updated: 2023/02/15 19:54:47 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,6 +20,7 @@ #include #include +#include //toupper #include #include //std::string #include //errno @@ -39,6 +40,8 @@ #define MAX_CHAN 10 #define READ_SIZE 10 #define CMD_NBR 10 +#define OP_PASSWORD "password" +#define OP_NAME "operator" // if (!allFds.userData[userNbr].registered) diff --git a/includes/function_tab.hpp b/includes/function_tab.hpp index af6969e..ce739ba 100644 --- a/includes/function_tab.hpp +++ b/includes/function_tab.hpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/10 08:55:52 by apommier #+# #+# */ -/* Updated: 2023/02/10 09:59:21 by apommier ### ########.fr */ +/* Updated: 2023/02/15 19:52:41 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -71,8 +71,10 @@ struct functionTab std::vectorcmdPtr; functionTab() { - + //cmdName.push_back("squit"); + //cmdName.push_back("kill"); //4.1 Etablissement de connexion + cmdName.push_back("PASS"); cmdName.push_back("NICK"); cmdName.push_back("USER"); @@ -129,6 +131,9 @@ struct functionTab //4. Détails des messages // //4.1 Etablissement de connexion + + //cmdPtr.push_back(SQUIT); + //cmdPtr.push_back(KILL); cmdPtr.push_back(PASS); cmdPtr.push_back(NICK); cmdPtr.push_back(USER); diff --git a/srcs/commands/channel_op/mode.cpp b/srcs/commands/channel_op/mode.cpp index 6dd7940..74f2f0d 100644 --- a/srcs/commands/channel_op/mode.cpp +++ b/srcs/commands/channel_op/mode.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:19:30 by apommier #+# #+# */ -/* Updated: 2023/02/14 23:28:49 by apommier ### ########.fr */ +/* Updated: 2023/02/15 17:02:12 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,17 +27,16 @@ int search_and_erase(std::string &str, std::string toFind) return 1; } - - void do_chan_option(fdList &allFds, int userNbr, std::string opt /*, channel (string or direct reference or pointer but no copy)*/) { (void)allFds; (void)userNbr; for (int i = 0; opt[i]; i++) { + //mode_i() //call option //switch ? if forest? map container ? 2 tab (name and function pointer) ? - // opt_i(int signe (= ou -), channel, user); + // opt_i(int signe (+ ou -), channel, user); } return; } @@ -50,7 +49,7 @@ void do_user_option(fdList &allFds, int userNbr, std::string opt) { //call option //switch ? if forest? map container ? 2 tab (name and function pointer) ? - // opt_i(int signe (= ou -), user); + // opt_i(int signe (+ ou -), user); } return; } @@ -68,7 +67,7 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) //check if user is op? else error //check if (splitBuff[2][0] == +/-) //splitbuff[2] always equal to {[+|-]|o|p|s|i|t|n|b|v} //else ??? erreur j'imagine mais j'ai pas trouvé - if (splitBuff[1][0] == '#' || splitBuff[1][0] == '&') //splitbuff[1] always equal to or + if (splitBuff[1][0] == '#' || splitBuff[1][0] == '&') //splitbuff[1] always equal to or { if (find_channel(allFds, splitBuff[1]) == -1) //if true chan doesn't exist { @@ -96,57 +95,4 @@ void MODE(std::string buffer, fdList &allFds, int userNbr) search_and_erase(splitBuff[2], "iwso"); //do_option one by one here (do_user_opt)? -} - -// void verify_option(fdList &allFds, std::string str, int i) -// { -// (void)allFds; -// (void)i; -// (void)str; -// std::string find = "opsitnmlbvk"; -// std::cout << "1 str = "<< str << std::endl; -// search_and_erase(str, find); -// std::cout << "2 str = "<< str << std::endl; -// //use_option(allFds, str, ) -// } - -// void MODE(std::string buffer, fdList &allFds, int userNbr) -// { -// (void)buffer; -// (void)allFds; -// (void)userNbr; -// int i = 1; -// std::vector splitBuff; -// std::cout << "---------------->" << std::endl; -// split(buffer, ' ', splitBuff); -// std::vector::iterator ptr = splitBuff.begin(); -// std::cout << "-------->" << splitBuff.size() << std::endl; -// if (splitBuff.size() != 6) -// { -// std::cout << "ERR_NEEDMOREPARAMS" << std::endl; -// return ; -// } -// ptr++; -// std::string str = *ptr; /*std::string str = splitBuff[1]; ⚠️ */ /*STR sert a rien |*ptr = str|*/ -// if (str[0] == '#' || str[0] == '&') -// { -// std::string cmd = str.substr(1, str.npos); //std::string cmd = (*ptr).substr(1, str.npos); //Not needed? need full channel's name with # or & -// std::cout << "test = "<< str << std::endl; //std::cout << "test = "<< *ptr << std::endl; -// if (find_channel(allFds, cmd) < 0) //find_channel(allFds, cmd) -// std::cout << "Channel " << cmd <<" Not found" << std::endl; -// while (ptr != splitBuff.end()) -// { -// std::string str = *ptr; -// if (str[0] == '#' || str[0] == '&') -// { -// // if (find_channel(allFds, str+1)) -// std::cout << "test = "<< str << std::endl; - -// } -// verify_option(allFds, str, i); -// ptr++; -// i++; -// } -// } -// return ; -// } \ No newline at end of file +} \ No newline at end of file diff --git a/srcs/commands/not_done_cmd.cpp b/srcs/commands/not_done_cmd.cpp index 22f08b2..5f86db3 100644 --- a/srcs/commands/not_done_cmd.cpp +++ b/srcs/commands/not_done_cmd.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/09 22:04:11 by apommier #+# #+# */ -/* Updated: 2023/02/14 21:28:14 by apommier ### ########.fr */ +/* Updated: 2023/02/15 17:00:46 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -163,13 +163,7 @@ void WHOWAS(std::string buffer, fdList &allFds, int userNbr) return ; } -void KILL(std::string buffer, fdList &allFds, int userNbr) -{ - (void)buffer; - (void)allFds; - (void)userNbr; - return ; -} + // void PING(std::string buffer, fdList &allFds, int userNbr) // { diff --git a/srcs/commands/operator/kill.cpp b/srcs/commands/operator/kill.cpp new file mode 100644 index 0000000..d63f40b --- /dev/null +++ b/srcs/commands/operator/kill.cpp @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* kill.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: apommier +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/02/15 16:34:57 by apommier #+# #+# */ +/* Updated: 2023/02/15 19:50:16 by apommier ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../../includes/ft_irc.hpp" + +void KILL(std::string buffer, fdList &allFds, int userNbr) +{ + int pos; + std::vector splitBuff; + split(buffer, ' ', splitBuff); + if (splitBuff.size() < 3) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "431 * KILL :Not enought argument\n"); + return ; + } + if (!allFds.userData[userNbr].op) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "481 * :Permission Denied- You're not an IRC operator\n"); + return ; + } + pos = find_user(allFds, splitBuff[1]); + if (pos == -1) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "401 * KILL " + splitBuff[1] + " :No such nick/channel\n"); + return ; + } + std::string msg; + std::string fullMsg; + msg = "connection killed by " + allFds.userData[userNbr].nickname + " " + buffer.substr(buffer.find_first_of(':'), std::string::npos); + fullMsg = ":" + allFds.userData[userNbr].nickname + "!" + allFds.userData[userNbr].userName + "@172.17.0.1 " + msg; + send(allFds.userData[pos].fd, fullMsg.c_str(), fullMsg.size(), 0); + //send_notice_msg(allFds, allFds.userData[userNbr].fd, userNbr) + delete_user(allFds, pos); + return ; +} \ No newline at end of file diff --git a/srcs/commands/operator/oper.cpp b/srcs/commands/operator/oper.cpp index c5b46dc..8caa1fa 100644 --- a/srcs/commands/operator/oper.cpp +++ b/srcs/commands/operator/oper.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:04:47 by apommier #+# #+# */ -/* Updated: 2023/02/15 15:23:13 by apommier ### ########.fr */ +/* Updated: 2023/02/15 19:43:22 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,6 @@ void OPER(std::string buffer, fdList &allFds, int userNbr) { - int pos; std::vector splitBuff; std::string msg; @@ -24,18 +23,24 @@ void OPER(std::string buffer, fdList &allFds, int userNbr) cmd_error(allFds, allFds.userData[userNbr].fd, "461 * OPER :Not enough parameters\n"); return ; } - if (splitBuff[2] != allFds.password) + //:irc.local 491 kinou2 + if (splitBuff[1] != OP_NAME) + { + cmd_error(allFds, allFds.userData[userNbr].fd, "491 * :Invalid oper credentials\n"); + return ; + } + if (splitBuff[2] != OP_PASSWORD) { cmd_error(allFds, allFds.userData[userNbr].fd, "464 * :Password incorrect\n"); return ; } - pos = find_user(allFds, splitBuff[1]); //return direct user fd - if (pos != -1) - { - cmd_error(allFds, allFds.userData[userNbr].fd, "401 * SQUIT " + splitBuff[1] + " :No such nick/channel\n"); - return ; - } - allFds.userData[pos].op = 1; - msg = "381 * " + allFds.userData[pos].nickname + " :You are now an IRC operator\n"; - send(allFds.userData[pos].fd, msg.c_str(), msg.size(), 0); + // pos = find_user(allFds, splitBuff[1]); + // if (pos != -1) + // { + // cmd_error(allFds, allFds.userData[userNbr].fd, "401 * SQUIT " + splitBuff[1] + " :No such nick/channel\n"); + // return ; + // } + allFds.userData[userNbr].op = 1; + msg = "381 * " + allFds.userData[userNbr].nickname + " :You are now an IRC operator\n"; + send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0); } \ No newline at end of file diff --git a/srcs/commands/operator/squit.cpp b/srcs/commands/operator/squit.cpp index 4a1e326..3f1b760 100644 --- a/srcs/commands/operator/squit.cpp +++ b/srcs/commands/operator/squit.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:11:03 by apommier #+# #+# */ -/* Updated: 2023/02/15 15:10:43 by apommier ### ########.fr */ +/* Updated: 2023/02/15 20:05:27 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,10 +16,10 @@ void SQUIT(std::string buffer, fdList &allFds, int userNbr) { - (void)buffer; - (void)allFds; - (void)userNbr; - + // (void)buffer; + // (void)allFds; + // (void)userNbr; + std::cout << "squit | server end\n"; std::vector splitBuff; split(buffer, ' ', splitBuff); if (splitBuff.size() < 2) @@ -32,11 +32,13 @@ void SQUIT(std::string buffer, fdList &allFds, int userNbr) cmd_error(allFds, allFds.userData[userNbr].fd, "481 * :Permission Denied- You're not an IRC operator\n"); return ; } - if (splitBuff[2] != "irc.local") + std::cout << "squit serv= " << splitBuff[2] << std::endl; + if (splitBuff[1] != "irc.local") { cmd_error(allFds, allFds.userData[userNbr].fd, "402 * " + splitBuff[2] + " :No such server\n"); return ; } + std::cout << "squit | alive = 0\n"; allFds.alive = 0; // if (allFds.userData[userNbr].op) // allFds.alive = 0; diff --git a/srcs/commands/other/quit.cpp b/srcs/commands/other/quit.cpp index 717d985..43de71a 100644 --- a/srcs/commands/other/quit.cpp +++ b/srcs/commands/other/quit.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/02/11 19:10:26 by apommier #+# #+# */ -/* Updated: 2023/02/15 13:27:15 by apommier ### ########.fr */ +/* Updated: 2023/02/15 20:15:13 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -43,7 +43,7 @@ void QUIT(std::string buffer, fdList &allFds, int userNbr) split(buffer, ' ', splitBuff); if (splitBuff.size() == 2) { - send_quit_msg(allFds, userNbr, splitBuff[2]); + send_quit_msg(allFds, userNbr, splitBuff[1]); //print message? //:kinou2!kinou@172.17.0.1 QUIT :Quit: leaving } diff --git a/srcs/commands/parse_commands.cpp b/srcs/commands/parse_commands.cpp index adf7eb2..1ce782b 100644 --- a/srcs/commands/parse_commands.cpp +++ b/srcs/commands/parse_commands.cpp @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/06 22:01:25 by apommier #+# #+# */ -/* Updated: 2023/02/14 01:16:34 by apommier ### ########.fr */ +/* Updated: 2023/02/15 20:09:04 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,6 +18,8 @@ std::string ft_test() return ("prout"); } + + void parse_commands(std::string buffer, fdList &allFds, int userNbr) { //std::string cmd = buffer; @@ -41,8 +43,10 @@ void parse_commands(std::string buffer, fdList &allFds, int userNbr) return ; allFds.userData[userNbr].cmdBuffer.erase(allFds.userData[userNbr].cmdBuffer.size() - 1); split(allFds.userData[userNbr].cmdBuffer, ' ', splitBuff); - - //std::cout << "BUFFER In PARSING: ---" << allFds.userData[userNbr].cmdBuffer << "---" << std::endl; + std::cout << "before toupper: " << splitBuff[0] << std::endl; + for (size_t i = 0; i < splitBuff[0].size(); i++) + splitBuff[0][i] = toupper(splitBuff[0][i]); + std::cout << "after toupper: " << splitBuff[0] << std::endl; while (a < allFds.parsingTab.cmdNbr - 1 && splitBuff[0] != allFds.parsingTab.cmdName[a]) a++; //std::cout << "after while \n";