add exception instead exit to fix leak | add PING PONG | add password at connexion
This commit is contained in:
parent
a72c97f0f8
commit
370e099b22
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/01 17:27:37 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/13 19:48:40 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/14 02:40:49 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -17,7 +17,9 @@
|
||||
#include <netinet/in.h>//inet
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cstdlib>
|
||||
#include <exception>
|
||||
|
||||
#include <cstring> //std::string
|
||||
#include <cerrno> //errno
|
||||
#include <iostream> //std::cout | cerr
|
||||
@ -37,6 +39,14 @@
|
||||
#define READ_SIZE 10
|
||||
#define CMD_NBR 10
|
||||
|
||||
|
||||
// if (!allFds.userData[userNbr].registered)
|
||||
// {
|
||||
// /*change error*/
|
||||
// cmd_error(allFds, allFds.userData[userNbr].fd, "451 * JOIN :You have not registered\n"); //ERR_NEEDMOREPARAMS
|
||||
// return ;
|
||||
// }
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* *********************************STRUCT*********************************** */
|
||||
/* ************************************************************************** */
|
||||
@ -139,7 +149,7 @@ struct fdList //&allFds in code | /!\ only one on the server | REFERENCE ONLY
|
||||
accessList<clientData> userData;
|
||||
|
||||
int alive;
|
||||
|
||||
std::string password;
|
||||
int nbrUser;
|
||||
functionTab parsingTab;
|
||||
};
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* 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 */
|
||||
/* Updated: 2023/02/14 02:19:19 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -19,6 +19,15 @@ void connect_client(fdList &allFds, int userNbr)
|
||||
// if (-1 == connect(allFds.userData[userNbr].fd, (struct sockaddr *)&allFds.userData[userNbr].addr, sizeof(allFds.userData[userNbr].addr)))
|
||||
// ft_error("connect() error");
|
||||
|
||||
if (allFds.userData[userNbr].password.empty() || allFds.userData[userNbr].password != allFds.password)
|
||||
{
|
||||
std::cout << "password= " << allFds.userData[userNbr].password << std::endl;
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "464 * :Password incorrect\n");
|
||||
return ;
|
||||
}
|
||||
//464 ERR_PASSWDMISMATCH
|
||||
//":Password incorrect"
|
||||
|
||||
allFds.userData[userNbr].registered = 1;
|
||||
print_registered_msg(allFds, userNbr);
|
||||
std::cout << "connect client end\n";
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/06 14:28:38 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 23:37:37 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/14 01:25:31 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -29,7 +29,7 @@ void NICK(std::string buffer, fdList &allFds, int userNbr)
|
||||
//if nickname ok then (another user has it? )
|
||||
//ERR_NONICKNAMEGIVEN
|
||||
allFds.userData[userNbr].nickname = splitBuff[1];
|
||||
if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty())
|
||||
if (!allFds.userData[userNbr].registered && !allFds.userData[userNbr].userName.empty() /*&& !allFds.userData[userNbr].password.empty()*/)
|
||||
{
|
||||
connect_client(allFds, userNbr);
|
||||
// allFds.userData[userNbr].registered = 1;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/06 14:40:42 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/13 17:33:51 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/14 02:28:03 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -36,5 +36,5 @@ void PASS(std::string buffer, fdList &allFds, int userNbr)
|
||||
// }
|
||||
|
||||
password = buffer.substr(5, buffer.npos);
|
||||
allFds.userData[userNbr].password = buffer;
|
||||
allFds.userData[userNbr].password = password;
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/06 14:40:39 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/13 20:05:39 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/14 01:25:22 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -44,7 +44,7 @@ void USER(std::string buffer, fdList &allFds, int userNbr)
|
||||
allFds.userData[userNbr].serverName = splitBuff[3];
|
||||
|
||||
allFds.userData[userNbr].realName = realName;
|
||||
if (!allFds.userData[userNbr].nickname.empty())
|
||||
if (!allFds.userData[userNbr].nickname.empty() /*&& !allFds.userData[userNbr].password.empty()*/)
|
||||
{
|
||||
connect_client(allFds, userNbr);
|
||||
// allFds.userData[userNbr].registered = 1;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/02/09 15:40:33 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/13 20:21:28 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/14 00:41:43 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
// 1459
|
||||
// ERR_NEEDMOREPARAMS + ERR_BANNEDFROMCHAN
|
||||
// ERR_INVITEONLYCHAN + ERR_BADCHANNELKEY
|
||||
// ERR_CHANNELISFULL x ERR_BADCHANMASK ?
|
||||
// ERR_CHANNELISFULL x ERR_BADCHANMASK ? +
|
||||
// ERR_NOSUCHCHANNEL x ERR_TOOMANYCHANNELS x
|
||||
// RPL_TOPIC
|
||||
|
||||
@ -74,48 +74,11 @@ int chan_check(fdList &allFds, int userNbr, int chanNbr, std::vector<std::string
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
||||
void join_or_create(std::vector<std::string> splitBuff, 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 registered\n"); //ERR_NEEDMOREPARAMS
|
||||
return ;
|
||||
}
|
||||
split(buffer, ' ', splitBuff);
|
||||
if (splitBuff.size() < 2)
|
||||
{
|
||||
/*change error*/
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * JOIN :Not enough parameters\n"); //ERR_NEEDMOREPARAMS
|
||||
return ;
|
||||
}
|
||||
//if (splitBuff[1].find(' ') != std::string::npos || splitBuff[1].find(7) != std::string::npos)
|
||||
if (splitBuff[1][0] != '#' && splitBuff[1][0] != '&')
|
||||
{
|
||||
//leave_all(allFds, userNbr);
|
||||
return ;
|
||||
}
|
||||
if (splitBuff[1] == "0")
|
||||
{
|
||||
leave_all(allFds, userNbr);
|
||||
return ;
|
||||
}
|
||||
chanNbr = find_channel(allFds, splitBuff[1]);
|
||||
if (chanNbr != -1) //chan already exist
|
||||
{
|
||||
@ -146,5 +109,50 @@ void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
||||
send(joined_chan.userList[i]->fd, fullMsg.c_str(), fullMsg.size(), 0);
|
||||
std::cout << "loop here\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void JOIN(std::string buffer, fdList &allFds, int userNbr)
|
||||
{
|
||||
std::vector<std::string> splitBuff;
|
||||
std::string msg;
|
||||
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 registered\n"); //ERR_NEEDMOREPARAMS
|
||||
return ;
|
||||
}
|
||||
split(buffer, ' ', splitBuff);
|
||||
if (splitBuff.size() < 2)
|
||||
{
|
||||
/*change error*/
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, "461 * JOIN :Not enough parameters\n"); //ERR_NEEDMOREPARAMS
|
||||
return ;
|
||||
}
|
||||
//if (splitBuff[1].find(' ') != std::string::npos || splitBuff[1].find(7) != std::string::npos)
|
||||
if (splitBuff[1][0] != '#' && splitBuff[1][0] != '&')
|
||||
{
|
||||
//error bad channel name
|
||||
msg = "476 * JOIN " + splitBuff[1] + " ::Bad Channel Mask\n";
|
||||
cmd_error(allFds, allFds.userData[userNbr].fd, msg);
|
||||
//:Bad Channel Mask
|
||||
return ;
|
||||
}
|
||||
if (splitBuff[1] == "0")
|
||||
{
|
||||
leave_all(allFds, userNbr);
|
||||
return ;
|
||||
}
|
||||
join_or_create(splitBuff, allFds, userNbr);
|
||||
//send 352 and 315 or 353 and 366 (WHO or NAME)
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* 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 */
|
||||
/* Updated: 2023/02/14 00:11:54 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -51,14 +51,19 @@ void PING(std::string buffer, fdList &allFds, int userNbr)
|
||||
std::string msg;
|
||||
std::vector<std::string> splitBuff;
|
||||
split(buffer, ' ', splitBuff);
|
||||
msg = ":irc.local PONG irc.local :irc.local";
|
||||
msg = ":irc.local PONG irc.local :" + splitBuff[1] + "\n";
|
||||
//msg = "PONG irc.local " + splitBuff[1];
|
||||
send(allFds.userData[userNbr].fd, msg.c_str(), msg.size(), 0);
|
||||
std::cout << "pong send\n";
|
||||
std::cout << "/r = " << (int)'\r' << "\n";
|
||||
std::cout << "/n = " << (int)'\n' << "\n";
|
||||
std::cout << "msg=" << msg << "\n";
|
||||
// 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/13 19:44:43 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/14 01:16:34 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -24,7 +24,7 @@ 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;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/01 17:27:33 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/12 22:35:11 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/14 03:00:42 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -14,21 +14,20 @@
|
||||
|
||||
int main(int ac, char **av)
|
||||
{
|
||||
if (!(ac == 3 || ac == 2))
|
||||
if (!(ac == 3))
|
||||
{
|
||||
//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
|
||||
// {
|
||||
// initialize(av);
|
||||
// }
|
||||
// catch
|
||||
// {
|
||||
|
||||
// }
|
||||
initialize(av);
|
||||
try
|
||||
{
|
||||
initialize(av);
|
||||
}
|
||||
catch(std::exception &e)
|
||||
{
|
||||
std::cout << "Fatal error causing the end of the program :/\n";
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/06 21:44:20 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/13 00:04:55 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/14 01:51:55 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -26,11 +26,12 @@ void initialize(char **av)
|
||||
int opt = 1;
|
||||
struct sockaddr_in addr;
|
||||
//int addrLen = sizeof(addr);
|
||||
fdList allFds;
|
||||
fdList allFds;
|
||||
|
||||
//allFds.userData.reserve(MAX_EVENTS);
|
||||
//allFds.channelList.reserve(MAX_CHAN);
|
||||
|
||||
allFds.password = av[2];
|
||||
std::cout << "pass= " << av[2] << std::endl;
|
||||
allFds.nbrUser = 0;
|
||||
allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (allFds.serverFd == -1)
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/06 21:46:41 by apommier #+# #+# */
|
||||
/* Updated: 2023/02/13 10:52:07 by apommier ### ########.fr */
|
||||
/* Updated: 2023/02/14 02:56:48 by apommier ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -18,7 +18,8 @@ void ft_error(std::string str)
|
||||
if (errno)
|
||||
{
|
||||
std::cerr << "errno: " << strerror(errno) << std::endl;
|
||||
exit(errno);
|
||||
throw std::bad_alloc();
|
||||
//exit(errno);
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user