ft_irc's People
ft_irc's Issues
Fix pointer comparison
PART fonctionne mais une erreur est renvoyée
Quand un utilisateur PART d'un channel la commande fonctionne mais l'erreur NOSUCHCHANNEL lui est quand même renvoyée
Au bout d'un certain temps le serveur tourne en boucle (poll ne bloque plus)
Erreur dans la demande de password quand plusieurs clients sont connectes
Quand un 2e client se connect, et qu'il ne tape pas son password, la fonctionnalite fonctionne bien par contre le message qui lui demande son password n'est pas envoye
Stocker tous les clients dans une list chainée
Quand un client se connecte, il doit envoyer son username avec la commande USER
et son nickname avec la commande NICK
, il faut ensuite parser et mettre dans la liste chainé.
La structure pourrait ressembler a ceci:
struct user {
int socket_id;
std::string nickname;
std::string username;
struct user *next;
};
Ressources: https://oramind.com/tutorial-how-to-make-an-irc-server-connection/
Erreur OPER avec deux users
Message d'erreur: Irssi: Not connected to server
Il y a peut-être un problème avec les fds
Avoir un type d'utilisateur operator avec des droits différents
Permettre a un utilisateur de devenir operator
- Le premier user connecté ?
- Set une variable
bool is_operator
dans la structure user
delete ou remplacer les fonctions non-autorisées
Remplacé:
- _atoi
- _close
- _exit
- _perror
- _read
- _strcmp
- _strlen
Gerer les auto reply de PRIVMSG
Permettre de :
- set un away message
- dire qu'on est away
- dire qu'on est revenu
- envoyer un message auto quand un utilisateur est away
Faut-il supprimer le code relatif a la map de commandes ?
if (all_users[i - 1].connected == true)
{
// DBG(buffer)
if (cmds.find(buffer) != cmds.end()) // On cherche dans la map si la commande existe
{
cmds.find(buffer)->second(fds, nfds, i); // On exécute la fonction associée
}
else // Ce n'est pas une commande connue, on envoie le message à tous les utilisateurs présents dans le channel
{
for (unsigned int j = 1; j <= (unsigned int)nfds; j++)
{
if (j != i)
{
send(fds[j].fd, buffer, strlen(buffer), 0);
}
}
}
}
std::cout << buffer;
Problème avec delete_user_from_list
Par exemple avec la command QUIT, lorsqu'on supprime un utilisateur de la liste qui se trouve à la fin tout se passe bien, par contre quand il a un next il y a un problème avec la liste d'utilisateurs
Récupérer username, nickname et password pour connecter un utilisateur en utilisant le protocol irc
Avoir un fichier de config avec des oper blocks
Je n'ai pas encore tout saisi mais il me semble qu'il faudrait stocker tous les comptes operators dans un fichier de config sous forme d'oper block: (https://www.unrealircd.org/docs/Oper_block) Qu'est ce que tu en penses ?
Quand il y a des espaces dans un message seul le premier mot est envoyé
Il faudrait peut-être reformer le message avant de l'envoyer
Problème avec les messages dans les channels
Avec 2 utilisateurs connectés: si le 2eme à s'être connecté JOIN un channel et qu'il écrit un message dedans son propre message lui est envoyé 2 fois au lieu d'1 avec pour le 1er message en nick RPL WELCOME et pour le 2eme son nick. Quand le 1er utilisateur join le channel même chose et ils ne reçoivent pas les messages de l'un ou de l'autre
Quand un utilisateur est déconnecté et se reconnecte ses commandes ne sont pas exécutées
Définir ce qu'il y a à faire
Le but de cette issue est de définir un plan, une liste de taches a réaliser pour réaliser ce projet.
Pour le moment je pense à:
- Setup le folder avec Makefile + main.cpp (#2)
- Créer un basic serveur qui accept les connexions (#4)
- Ajouter la vérification des arguments (port + password) et prévenir les erreurs + ajouter les tests nécessaires (#3)
- Stocker les commandes et leur fonction associee dans une map (#10)
- Stocker tous les clients dans une list chainée (#5)
- Tester que le serveur irc reçoit bien les packets envoyées par le client (#6)
- Permettre qu'un message reçu peut-être envoyer en broadcast a tous les clients (#7)
- #13
- #14
- Filter les commandes et permettre de réaliser d'autres options (envoyées un message privé, changer son username, etc...)
- Avoir un type d'utilisateur operator avec des droits différents
Setup le projet avec Makefile + main.cpp
Verifier le nombre d'argument de PRIVMSG
Il ne doit y avoir que 3 arguments: PRIVMSG destinataire message
Permettre d'envoyer des messages dans les channels
Les privmsg et les msg de channel ne fonctionnent plus
JOIN command
Probable leaks dans les return de server::exec
Dans la fonction membre server::exec nous faisons beaucoup de return, cependant nous ne liberons pas la memoire du split de la commande (comme c'est le cas en bas de la fonction avec delete[] value
). Ce qui genere probablement des leaks
Tester que le serveur irc reçoit bien les packets envoyées par le client
Implement private message and notice
Stocker les commandes et leur fonction associee dans une map
Au debut du programme stocker toutes les commandes ainsi que leur fonction dans une map et pouvoir appeler chacune d'elles en fonction de la commande recue
Ajouter la vérification des arguments (port + password) et prévenir les erreurs
- ajouter les tests nécessaires
Permettre a un operator de changer le topic
Erreur message chat
- Quand un utilisateur a quitter un channel, il peut toujours encore des messages dedans. Ça ne devrait pas etre possible
- Quand un channel n'existe pas, un message est quand meme envoye, ça ne devrait pas etre possible non plus
Permettre qu'un message reçu peut-être envoyer en broadcast a tous les clients
Fix les leaks généré par l'issue sur NICK/USER (#20)
Permettre a un operator de kill un client
- Recuperer la commande kill
- Regarder si il l'utilisateur est operator
Ameliorer la reply de reponse de PRIVMSG
Quand 2 users join le même channel le programme crash
Ca viendrait de la boucle qui envoie un message lorsqu'un utilisateur rejoint un channel:
for (int it = 0; it < (chan->nb_users); it++)
{
send_user_joined_channel(
fds[chan->users_id[it]].fd,
get_user(i -1, all_users)->nickname,
get_user(i -1, all_users)->username,
value[1]
);
}
Gerer les phrases dans les messages envoyes
Permettre a un utilisateur de quitter un chat irc
Pour le moment on utilise exit mais il faut utiliser le protocol irc
Créer un basic serveur qui accept les connexions
Buffer qui ne se vide pas après read
Le buffer utilisé pour stocker les données lues avec la fonction read() ne se vide pas.
Fix possible : Utiliser malloc et free pour l'allocation du buffer, augmenter la taille maximale
Verifier que la premiere commande entree par l'utilisateur soit PASS
Verifier que la premiere commande entree par l'utilisateur soit PASS pour s'authentifier auprès du serveur
Retirer les fds update de poll()
Au bout d'un certain temps il y a un bug sur le server, poll ne fait qu'envoyer des changements de FD et ne bloque rien. Il est possible qu'il soit necessaire de retirer les fds une fois qu'ils ont renvoyer un event.
Quand le dernier user à s'être connecté quitte le serveur et que quelqu'un parle dans un channel le programme crash
https://i.imgur.com/KIkPERZ.png
Par contre s'il se reconnecte ou qu'un autre utilisateur se connecte avant qu'un message soit envoyé tout fonctionne normalement
Echec de la levée d'erreur dans le cas où une un nickname existe déjà
Dans le cas où un nickname existe déjà il faut renvoter une erreur. Cela fonctionne bien avec telnet mais pas avec irssi qui ne recoit pas le message (ou ne l'affiche pas).
Allow operators to KICK users out of a channel
Retirer un utilisateur des channels dont il est membre quand il est déconnecté
Quand un utilisateur exécute la commande QUIT ou se fait KILL il faut également le retirer de la liste des utilisateurs de chaque channel dont il fait partie.
Quand le créateur d'un channel veut PART il doit entrer la commande 2 fois
corriger le probleme d'espace de split
Quand on recupere les commandes envoyes par le client (et via telnet), le split fonctionne mal, exemple
PASS password
au lieu de
PASS password
Renvoie ERR_NEEDMOREPARAMS
alors qu'il devrait valider la commande
Avoir une liste répertoriant tous les channels
Utiliser une liste pour stocker tous nos channels qui seraient sous forme de structure avec pour attributs leur nom et un tableau contenant tous les membres du channel.
struct channel
{
std::string name;
user* users;
}
std::list<channel> channels;
Ameliorer le message de retour d'un user AWAY
Quand on envoie un message a un utilisateur, irssi affiche par exemple.
<user> :<message> is away:
Il faut modifier pour quelque chose comme
<user> is away: <message>
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.