@@ -138,6 +138,7 @@ class MessageParser {
138138 let sequenceN ;
139139 let commandByte ;
140140 let payloadSize ;
141+ let overwriteVersion ;
141142
142143 if ( suffix === 0x0000AA55 ) {
143144 // Get sequence number
@@ -154,6 +155,9 @@ class MessageParser {
154155 throw new TypeError ( `Packet missing payload: payload has length ${ payloadSize } .` ) ;
155156 }
156157 } else if ( suffix === 0x00009966 ) {
158+ // When this suffix comes in we should have 3.5 version
159+ overwriteVersion = '3.5' ;
160+
157161 // Get sequence number
158162 sequenceN = buffer . readUInt32BE ( 6 ) ;
159163
@@ -167,6 +171,8 @@ class MessageParser {
167171 if ( buffer . length - 8 < payloadSize ) {
168172 throw new TypeError ( `Packet missing payload: payload has length ${ payloadSize } .` ) ;
169173 }
174+ } else {
175+ throw new TypeError ( `Suffix does not match: ${ buffer . toString ( 'hex' ) } ` ) ; // Should never happen
170176 }
171177
172178 const packageFromDiscovery = (
@@ -183,7 +189,7 @@ class MessageParser {
183189 // Get the payload
184190 // Adjust for messages lacking a return code
185191 let payload ;
186- if ( this . version === '3.5' ) {
192+ if ( overwriteVersion === '3.5' || this . version === '3.5' ) {
187193 payload = buffer . slice ( HEADER_SIZE_3_5 , HEADER_SIZE_3_5 + payloadSize ) ;
188194 sequenceN = buffer . slice ( 6 , 10 ) . readUInt32BE ( ) ;
189195 commandByte = buffer . slice ( 10 , 14 ) . readUInt32BE ( ) ;
@@ -222,17 +228,18 @@ class MessageParser {
222228 }
223229 }
224230
225- return { payload, leftover, commandByte, sequenceN} ;
231+ return { payload, leftover, commandByte, sequenceN, version : overwriteVersion || this . version } ;
226232 }
227233
228234 /**
229235 * Attempts to decode a given payload into
230236 * an object or string.
231237 * @param {Buffer } data to decode
238+ * @param {String } version of protocol
232239 * @returns {Object|String }
233240 * object if payload is JSON, otherwise string
234241 */
235- getPayload ( data ) {
242+ getPayload ( data , version ) {
236243 if ( data . length === 0 ) {
237244 return false ;
238245 }
@@ -243,13 +250,13 @@ class MessageParser {
243250 throw new Error ( 'Missing key or version in constructor.' ) ;
244251 }
245252
246- data = this . cipher . decrypt ( data ) ;
253+ data = this . cipher . decrypt ( data , version ) ;
247254 } catch ( _ ) {
248255 data = data . toString ( 'utf8' ) ;
249256 }
250257
251258 // Incoming 3.5 data isn't 0 because of iv and tag so check size after
252- if ( this . version === '3.5' ) {
259+ if ( version === '3.5' ) {
253260 if ( data . length === 0 ) {
254261 return false ;
255262 }
@@ -279,7 +286,7 @@ class MessageParser {
279286 parseRecursive ( buffer , packets ) {
280287 const result = this . parsePacket ( buffer ) ;
281288
282- result . payload = this . getPayload ( result . payload ) ;
289+ result . payload = this . getPayload ( result . payload , result . version ) ;
283290
284291 packets . push ( result ) ;
285292
0 commit comments