C# HelloConnectMessage bytes de trop ?

Inscrit
13 Mars 2013
Messages
9
Reactions
1
#1
Bonjour,

Excusez moi du dérangement, mais j'ai du refaire entièrement ma réception des packets (pour gérer les packets trop longs), et j'ai quelques problèmes pour recevoir le HelloConnectMessage...

Ce qui se passe, c'est que je reçois le packet, je le parse, j'obtiens alors un salt de 32 de long, et une clef RSA de 305 de long, ce qui est normal (il me semble).
Sauf qu'après parsage, il me reste 4 bytes dans mon buffer non utilisés, et ce n'est pas le header, car ces bytes non utilisés sont à la fin du packet...

Quelqu'un aurait une idée ?

Je ne suis pas très clair, alors voici mes logs :
Code:
La connexion au serveur d'authentification est réussie.

[Reçu] ID = 1 | Taille du contenu = 8
00 00 05 E1 00 00 05 E3 
Reception terminée, taille du packet : 8
Restant dans le buffer : 0

RequiredVersion = 1505 - CurrentServerVersion = 1507

[Reçu] ID = 3 | Taille du contenu = 341
00 20 68 67 36 68 6E 67 76 69 5E 5B 44 5A 34 45 
60 22 5D 73 64 37 68 5D 35 7D 41 7B 30 71 24 37 
23 67 01 31 99 26 F6 56 50 34 7B 69 8A C9 99 F3 
C6 CF 1B A5 E6 8E 84 1D 5A 70 8B F3 28 9F FE 07 
AA 14 B5 DE 65 65 05 45 E1 BC A5 2C 89 7C 2F 44 
45 77 13 58 18 95 8A FE C9 68 81 F5 58 E7 3B 9F 
14 EA 25 4A 54 ED 37 A2 4F 12 E2 C3 36 5A BE 76 
DB 12 EE 84 1F B4 00 08 42 33 3E DF 4E 59 19 B9 
AE 3E 72 9F 12 92 9C A7 A4 A0 63 EE E5 DF AB 03 
45 53 EA 18 9C 88 8A D3 76 2B D8 72 EE 1A 1D 39 
ED 53 24 EE 25 AC 80 E1 9E ED BC F8 07 B0 1E 54 
B8 21 E4 47 A8 34 CC 6D 66 7E 1B F6 7B 3D 0F 34 
84 05 BD 3B 19 0A 99 98 A0 5C C1 CC C3 6C 90 3E 
B6 55 4B 33 8B BF 14 0F 10 C1 83 B7 92 3F CF 4E 
61 FA 69 73 63 91 B2 23 C4 1D 3F C1 42 CA BD E6 
F3 A4 E2 9C 7E A3 10 CF 5A 3F 09 15 86 13 59 DE 
CD CE 38 7E 12 EF 8B 0F DA 94 7C 98 DA 3D EE 45 
47 42 FD 16 16 46 B0 46 4A 9C 9B E7 87 51 2B 7D 
9A B8 23 BB 61 AA 9F 2F 54 B5 BD EF 0A 6E B2 C6 
44 CC 16 FB F4 3B 82 9C 54 DA D4 7C 13 0E D3 01 
6D 7B 98 28 B6 AA DA 50 7E 7D A2 77 66 5B 25 26 
63 AD 68 B6 6B 
Reception terminée, taille du packet : 341
Restant dans le buffer : 4

Bytes de trop : 
02 DD 01 01 

Size = 305 - Salt = hg6hngvi^[DZ4E`"]sd7h]5}A{0q$7#g - Contain Size = 305

Voilà, j'ai 4 bytes restants dans le buffer, j'ai affiché leur contenu, mais ça ne m'avance pas beaucoup...

Je pensais au départ que c'était le début du packet suivant, mais non : rien n'arrive après ça...

Merci !! :)
 
A

Anonymous

Invité
#2
C'est bien les 4 bytes du paquet suivant, BasicPongMessage en l’occurrence (ID = 183).

Paquet :
Code:
02 DD 01 01
Hi-header : 02 DD en hexadécimal ou 1011011101 en binaire.
Packet ID : on enlève les 2 bits de poids faible du hi-header, 10110111 ou 183 (donc BasicPongMessage).
Longueur de la taille du paquet : on ne garde que les 2 bits de poids faible du hi-header, 01 en binaire, donc 1 en décimal.
Taille du paquet : on lit 1 byte seulement (Longueur de la taille du paquet ci-dessus), 01 en hexadécimal, donc 1 en décimal.
Contenu du paquet : 1 seul byte à lire (Taille du paquet ci-dessus), 01 en hexadécimal (ça correspond à l'attribut "quiet" de BasicPongMessage qui est un bool, il vaut donc true dans le cas présent).
Et voilà, le paquet est complet.

Si tu as du mal avec la structure des paquets Dofus 2 je te conseille de lire le tutoriel Comprendre le protocole de D2.0 de bouh2, c'est très bien expliqué ;) .


Dans ton code tu dis certainement "je veux recevoir tout ce qui est disponible", par exemple :
Code:
byte[] buffer = new byte[tonSocket.Available];
tonSocket.Receive(buffer);
Mais "tout ce qui est disponible" ce n'est pas seulement le prochain paquet... c'est vraiment tout ce qu'a envoyé le serveur Dofus et qui est arrivé. Ainsi tu peux recevoir le paquet qui suit le message que tu veux lire en même temps ou bien la moitié, les 3/4... À toi de faire en sorte de ne lire que le paquet qui t'intéresse et de garder les octets suivants (qui appartiennent au(x) paquet(s) suivant(s)) pour plus tard.
 
Inscrit
13 Mars 2013
Messages
9
Reactions
1
#3
Rah c'est ce que j'avais trouvé la dernière fois en plus...

Comme un imbécile, je n'ai pas été vérifier que 183 correspondait à un autre paquet (BasicPongMessage) :(

Non, c'est bon alors, tout va bien ! :)

Merci beaucoup !!!! :D
 
A

Anonymous

Invité
#4
Ça arrive :p !

De rien.
 
Inscrit
27 Aout 2012
Messages
264
Reactions
0
#5
Forcément, pour débloquer la connexion il faut envoyer un BasicPingMessage :).
Mais c'vrai qu'avant de lire la réponse de µnKn0wn_H4CK3r je n'avais pas de solution, en effet c'est tout évident...
Je n'y étais même pas confronté vu que tous les paquets sont implémentés chez moi :/.

Enfin bref, ma réponse est inutile, d'ailleurs je sais même pas pourquoi je la poste. Pas grave.
 
Inscrit
13 Mars 2013
Messages
9
Reactions
1
#6
Moonlight-Angel a dit:
Forcément, pour débloquer la connexion il faut envoyer un BasicPingMessage :).
Mais c'vrai qu'avant de lire la réponse de µnKn0wn_H4CK3r je n'avais pas de solution, en effet c'est tout évident...
Je n'y étais même pas confronté vu que tous les paquets sont implémentés chez moi :/.

Enfin bref, ma réponse est inutile, d'ailleurs je sais même pas pourquoi je la poste. Pas grave.
Oui c'est exactement ça :)

Non non c'est intéressant de voir que je ne suis pas le seul à être tombé dans le panneau :p

Enfin bref, ne sert plus à rien ce sujet, merci encore :)
 
Haut Bas