@@ -57,15 +57,16 @@ Util.inherits(FakeConnection, EventEmitter);
57
57
function FakeConnection ( socket ) {
58
58
EventEmitter . call ( this ) ;
59
59
60
+ this . database = null ;
61
+ this . user = null ;
62
+
60
63
this . _socket = socket ;
61
64
this . _ssl = null ;
62
65
this . _stream = socket ;
63
66
this . _parser = new Parser ( { onPacket : this . _parsePacket . bind ( this ) } ) ;
64
67
68
+ this . _expectedNextPacket = null ;
65
69
this . _handshakeInitializationPacket = null ;
66
- this . _clientAuthenticationPacket = null ;
67
- this . _oldPasswordPacket = null ;
68
- this . _authSwitchResponse = null ;
69
70
this . _handshakeOptions = { } ;
70
71
71
72
socket . on ( 'data' , this . _handleData . bind ( this ) ) ;
@@ -107,6 +108,21 @@ FakeConnection.prototype._sendAuthResponse = function _sendAuthResponse(got, exp
107
108
} ;
108
109
109
110
FakeConnection . prototype . _sendPacket = function ( packet ) {
111
+ switch ( packet . constructor ) {
112
+ case Packets . AuthSwitchRequestPacket :
113
+ this . _expectedNextPacket = Packets . AuthSwitchResponsePacket ;
114
+ break ;
115
+ case Packets . HandshakeInitializationPacket :
116
+ this . _expectedNextPacket = Packets . ClientAuthenticationPacket ;
117
+ break ;
118
+ case Packets . UseOldPasswordPacket :
119
+ this . _expectedNextPacket = Packets . OldPasswordPacket ;
120
+ break ;
121
+ default :
122
+ this . _expectedNextPacket = null ;
123
+ break ;
124
+ }
125
+
110
126
var writer = new PacketWriter ( ) ;
111
127
packet . write ( writer ) ;
112
128
this . _stream . write ( writer . toBuffer ( this . _parser ) ) ;
@@ -164,7 +180,7 @@ FakeConnection.prototype._handleQueryPacket = function _handleQueryPacket(packet
164
180
this . _sendPacket ( new Packets . EofPacket ( ) ) ;
165
181
166
182
var writer = new PacketWriter ( ) ;
167
- writer . writeLengthCodedString ( ( this . _clientAuthenticationPacket . user || '' ) + '@localhost' ) ;
183
+ writer . writeLengthCodedString ( ( this . user || '' ) + '@localhost' ) ;
168
184
this . _socket . write ( writer . toBuffer ( this . _parser ) ) ;
169
185
170
186
this . _sendPacket ( new Packets . EofPacket ( ) ) ;
@@ -266,7 +282,9 @@ FakeConnection.prototype._parsePacket = function() {
266
282
267
283
switch ( Packet ) {
268
284
case Packets . ClientAuthenticationPacket :
269
- this . _clientAuthenticationPacket = packet ;
285
+ this . database = ( packet . database || null ) ;
286
+ this . user = ( packet . user || null ) ;
287
+
270
288
if ( this . _handshakeOptions . oldPassword ) {
271
289
this . _sendPacket ( new Packets . UseOldPasswordPacket ( ) ) ;
272
290
} else if ( this . _handshakeOptions . authMethodName ) {
@@ -285,17 +303,11 @@ FakeConnection.prototype._parsePacket = function() {
285
303
this . _startTLS ( ) ;
286
304
break ;
287
305
case Packets . OldPasswordPacket :
288
- this . _oldPasswordPacket = packet ;
289
-
290
306
var expected = Auth . scramble323 ( this . _handshakeInitializationPacket . scrambleBuff ( ) , this . _handshakeOptions . password ) ;
291
-
292
307
this . _sendAuthResponse ( packet . scrambleBuff , expected ) ;
293
308
break ;
294
309
case Packets . AuthSwitchResponsePacket :
295
- this . _authSwitchResponse = packet ;
296
-
297
310
var expected = Auth . token ( this . _handshakeOptions . password , Buffer . from ( '00112233445566778899AABBCCDDEEFF01020304' , 'hex' ) ) ;
298
-
299
311
this . _sendAuthResponse ( packet . data , expected ) ;
300
312
break ;
301
313
case Packets . ComQueryPacket :
@@ -327,16 +339,9 @@ FakeConnection.prototype._parsePacket = function() {
327
339
break ;
328
340
}
329
341
330
- this . _clientAuthenticationPacket = new Packets . ClientAuthenticationPacket ( {
331
- clientFlags : this . _clientAuthenticationPacket . clientFlags ,
332
- filler : this . _clientAuthenticationPacket . filler ,
333
- maxPacketSize : this . _clientAuthenticationPacket . maxPacketSize ,
334
- protocol41 : this . _clientAuthenticationPacket . protocol41 ,
335
- charsetNumber : packet . charsetNumber ,
336
- database : packet . database ,
337
- scrambleBuff : packet . scrambleBuff ,
338
- user : packet . user
339
- } ) ;
342
+ this . database = ( packet . database || null ) ;
343
+ this . user = ( packet . user || null ) ;
344
+
340
345
this . _sendPacket ( new Packets . OkPacket ( ) ) ;
341
346
this . _parser . resetPacketNumber ( ) ;
342
347
}
@@ -352,18 +357,18 @@ FakeConnection.prototype._parsePacket = function() {
352
357
} ;
353
358
354
359
FakeConnection . prototype . _determinePacket = function _determinePacket ( ) {
355
- if ( ! this . _clientAuthenticationPacket ) {
356
- return ! this . _ssl && ( this . _parser . peak ( 1 ) << 8 ) & ClientConstants . CLIENT_SSL
357
- ? Packets . SSLRequestPacket
358
- : Packets . ClientAuthenticationPacket ;
359
- }
360
+ if ( this . _expectedNextPacket ) {
361
+ var Packet = this . _expectedNextPacket ;
360
362
361
- if ( this . _handshakeOptions . oldPassword && ! this . _oldPasswordPacket ) {
362
- return Packets . OldPasswordPacket ;
363
- }
363
+ if ( Packet === Packets . ClientAuthenticationPacket ) {
364
+ return ! this . _ssl && ( this . _parser . peak ( 1 ) << 8 ) & ClientConstants . CLIENT_SSL
365
+ ? Packets . SSLRequestPacket
366
+ : Packets . ClientAuthenticationPacket ;
367
+ }
368
+
369
+ this . _expectedNextPacket = null ;
364
370
365
- if ( this . _handshakeOptions . authMethodName && ! this . _authSwitchResponse ) {
366
- return Packets . AuthSwitchResponsePacket ;
371
+ return Packet ;
367
372
}
368
373
369
374
var firstByte = this . _parser . peak ( ) ;
0 commit comments