123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- var ClientConstants = require('../constants/client.js');
- var Charsets = require('../constants/charsets.js');
- var Packet = require('../packets/packet.js');
- var auth41 = require('../auth_41.js');
- function HandshakeResponse(handshake)
- {
- this.user = handshake.user || '';
- this.database = handshake.database || '';
- this.password = handshake.password || '';
- this.passwordSha1 = handshake.passwordSha1;
- this.authPluginData1 = handshake.authPluginData1;
- this.authPluginData2 = handshake.authPluginData2;
- this.compress = handshake.compress;
- this.clientFlags = handshake.flags;
- // TODO: pre-4.1 auth support
- var authToken;
- if (this.passwordSha1)
- authToken = auth41.calculateTokenFromPasswordSha(this.passwordSha1, this.authPluginData1, this.authPluginData2);
- else
- authToken = auth41.calculateToken(this.password, this.authPluginData1, this.authPluginData2);
- this.authToken = authToken;
- this.charsetNumber = handshake.charsetNumber;
- }
- HandshakeResponse.fromPacket = function(packet)
- {
- var args = {};
- //packet.skip(4);
- args.clientFlags = packet.readInt32();
- args.maxPacketSize = packet.readInt32();
- args.charsetNumber = packet.readInt8();
- packet.skip(23);
- args.user = packet.readNullTerminatedString();
- var authTokenLength = packet.readInt8();
- args.authToken = packet.readBuffer(authTokenLength);
- args.database = packet.readNullTerminatedString();
- //return new HandshakeResponse(args);
- return args;
- };
- HandshakeResponse.prototype.toPacket = function()
- {
- if (typeof this.user != 'string')
- throw new Error('"user" connection config prperty must be a string');
- if (typeof this.database != 'string')
- throw new Error('"database" connection config prperty must be a string');
- var length = 36 + 23 + this.user.length + this.database.length;
- var buffer = new Buffer(length);
- var packet = new Packet(0, buffer, 0, length);
- buffer.fill(0);
- packet.offset = 4;
- packet.writeInt32(this.clientFlags);
- packet.writeInt32(0); // max packet size. todo: move to config
- packet.writeInt8(this.charsetNumber);
- packet.skip(23);
- packet.writeNullTerminatedString(this.user);
- packet.writeInt8(this.authToken.length);
- packet.writeBuffer(this.authToken);
- packet.writeNullTerminatedString(this.database);
- return packet;
- };
- module.exports = HandshakeResponse;
|