Salut,
je m'explique : j'ai une classe qui dérive de sf::Packet (EncryptedPacket) qui me permet de crypter les données que j'envoie, et j'utilise la classe sf::Packet pour transférer des données non cryptées. (Donc en gros j'utilise les 2 a la fois.)
Malheureusement lorsque j'envoie des données de type EncryptedPacket depuis le client, le serveur les interprète comme si c'étaient des données de type sf::Packet et donc ne rentre pas dans la méthode Receive de ma classe dérivée...
Bref je vais mettre du code, je pense que vous comprendrez mieux ce que j'essaye de faire :
Le serveur ne fait rien d'autre que d'intercepter les messages envoyé par le client, et il envoie la clé publique à la demande du client pour que le client puisse ensuite crypter les messages qu'il envoie.
void SrkServer::run () {
while (true) {
unsigned int nbSockets = selector.Wait();
for (unsigned int i = 0; i < nbSockets; ++i)
{
SocketTCP socket = selector.GetSocketReady(i);
if (socket == listner) {
IPAddress clientAddress;
SocketTCP client;
socket.Accept(client, &clientAddress);
cout<<"Client connected : "<<clientAddress<<endl;
selector.Add(client);
} else {
Packet packet;
if (socket.Receive(packet) == Socket::Done) {
cout<<typeid(packet).name()<<endl;
string message;
packet>>message;
if (message == "GetPbKey") {
packet.Clear();
string message = Rsa::getPbKeyString();
packet<<message;
socket.Send(packet);
} else {
string message;
packet>>message;
cout<<"Client said : "<<message<<endl;
}
} else {
//channels[0]->removeClient(socket);
selector.Remove(socket);
}
}
}
}
}
J'ai fait un typeId sur le sf::Packet pour voir et les packets sont toujours de type sf::Packet et non de type EncryptedPacket
Y a t'il un moyen de pouvoir recevoir ou d'envoyer des paquets de différentes sortes avec la SFML ?
Ok, j'ai fait cela :
Packet *packet;
if (pbKeySend) {
packet = new EncryptedPacket();
} else {
packet = new Packet();
}
En gros si le serveur a déjà envoyer la clé, il ne reçois plus que des données cryptée donc...
Moi je pensais que l'on pourrait envoyer un pointeur à la socket et faire comme une sorte de polymorphisme, mais en effet ça na marche pas comme ça.
Par contre, j'ai l'impression que il rajoute des choses dans les packets lors de l'envoi/lé réception car les données que j'aie dans la méthode OnReceive de ma classe EncryptedPacket ne sont pas les mêmes que celle que j'ai lorsque j'extrais les donnée de mes encrypted packet, du coup mon système de cryptage RSA ne marche pas, je vais devoir crypter tout le message d'un coup et l'envoyer...