HelloConnectMessage, problème de longueur de key[...]

Inscrit
4 Aout 2016
Messages
166
Reactions
0
#1
Hey !

Je suis depuis un petit bout de temps maintenant sur la deserz. du HelloConnectMessage, j'ai bien tout traduit, ça ne me donne aucune erreur et un résultat plutot cohérent, mais comme je suis un noob, je préfère vérifier que tout marche bien en comparant avec un sniffer (par Alexandre).

Et le problème, c'est qu'avec le sniffer, mon client me sort 304 clefs, alors que moi je n'en sors que 30, pourtant j'ai l'impression de tout avoir bien traduit, alors j'ai cherché pendant au moins 3 - 4 heurs sur le forum et internet mais je n'ai rien trouvé qui puisse m'aider.. :/

Voici mon code :
JavaScript:
function deserializeAs_HelloConnectMessage (packetInfos, callback) {
    let saltLen = packetInfos.packetBody.readInt8(1)
    let saltBuf = packetInfos.packetBody.slice(2, saltLen + 2)
    let salt = saltBuf.toString('utf8')
    let key = []
    let bytesToRead = Buffer.byteLength(saltBuf)
    let byteHandler

    for (var i = 0; i < bytesToRead; i++) {
        byteHandler = saltBuf.readInt8(i)
        key.push(byteHandler)
    }

    console.log(key)
    let rtrn = { saltLen: saltLen, salt: salt, key: key }
    callback(3, rtrn, packetInfos)
    return rtrn
}
Code:
public function deserializeAs_HelloConnectMessage(param1:ICustomDataInput) : void
      {
         var _loc4_:int = 0;
         this.salt = param1.readUTF();
         var _loc2_:uint = param1.readVarInt();
         var _loc3_:uint = 0;
         while(_loc3_ < _loc2_)
         {
            _loc4_ = param1.readByte();
            this.key.push(_loc4_);
            _loc3_++;
         }
      }

Pourtant je me suis documenté sur les méthodes AS3 et .readByte(), comment son nom l'indique lis 1 byte == 8 octets, donc .readInt8() me parait légitime.. Sur la doc AS3 pour .readUTF8(), ils disent que la longueur du string doit être avant le string soit 00 20 == 32 dec. donc lire 32 clefs me parait aussi légitime..

Arf! c'est si confus dans ma tête ! :'(
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#2
var _loc2_:uint = param1.readVarInt();
Ahah il est tombé dans le piège -> ReadVarInt()

CustomDataWrapper.as
Code:
public function readVarInt() : int
      {
         var _loc4_:* = 0;
         var _loc1_:* = 0;
         var _loc2_:* = 0;
         var _loc3_:* = false;
         while(_loc2_ < INT_SIZE)
         {
            _loc4_ = this._data.readByte();
            _loc3_ = (_loc4_ & MASK_10000000) == MASK_10000000;
            if(_loc2_ > 0)
            {
               _loc1_ = _loc1_ + ((_loc4_ & MASK_01111111) << _loc2_);
            }
            else
            {
               _loc1_ = _loc1_ + (_loc4_ & MASK_01111111);
            }
            _loc2_ = _loc2_ + CHUNCK_BIT_SIZE;
            if(!_loc3_)
            {
               return _loc1_;
            }
         }
         throw new Error("Too much data");
      }
 
Inscrit
4 Aout 2016
Messages
166
Reactions
0
#3
Eheh tu crois pas si bien dire Alex ! :)

Je suis un noob, mais quand même en ayant cherché pendant longtemps, je suis passé par cette fonction et je l'ai traduite, mais elle me donne le même résultat ! x)
JavaScript:
function readVarInt(toRead, offset) {
    var loc4 = 0;
    var loc1 = 0;
    var loc2 = 0;
    var loc3 = false;
    while(loc2 < 32)
        {
            loc4 = toRead.readInt8(offset);
            loc3 = (loc4 & 128) == 128;
            if(loc2 > 0)
            {
                loc1 = loc1 + ((loc4 & 127) << loc2);
            }
            else
            {
                loc1 = loc1 + (loc4 & 127);
            }
            loc2 = loc2 + 7;
            if(!loc3)
            {
                return loc1;
            }
         }
         throw new Error("Too much data");
}
PS: Pourquoi t'as mis un tag "java" avec Node.js je suis pour l'ajout du tag "Javascript" ! :p
 

Kyu

Staff
Membre du personnel
Inscrit
4 Octobre 2009
Messages
327
Reactions
8
#4
Sujet tagué JAVA et je tombe sur du javascript.
#Déception
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#5
Typage faible ou fort, roh c'est pareil.
Bah pour le coup, j’admets ne pas trop savoir. Le parsing ?
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#7
J'ai rajouté le préfixe ;)
 
Haut Bas