39 lines
1.0 KiB
JavaScript
39 lines
1.0 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchRequest
|
||
|
|
||
|
const Packet = require('../packets/packet');
|
||
|
|
||
|
class AuthSwitchRequest {
|
||
|
constructor(opts) {
|
||
|
this.pluginName = opts.pluginName;
|
||
|
this.pluginData = opts.pluginData;
|
||
|
}
|
||
|
|
||
|
toPacket() {
|
||
|
const length = 6 + this.pluginName.length + this.pluginData.length;
|
||
|
const buffer = Buffer.allocUnsafe(length);
|
||
|
const packet = new Packet(0, buffer, 0, length);
|
||
|
packet.offset = 4;
|
||
|
packet.writeInt8(0xfe);
|
||
|
// TODO: use server encoding
|
||
|
packet.writeNullTerminatedString(this.pluginName, 'cesu8');
|
||
|
packet.writeBuffer(this.pluginData);
|
||
|
return packet;
|
||
|
}
|
||
|
|
||
|
static fromPacket(packet) {
|
||
|
packet.readInt8(); // marker
|
||
|
// assert marker == 0xfe?
|
||
|
// TODO: use server encoding
|
||
|
const name = packet.readNullTerminatedString('cesu8');
|
||
|
const data = packet.readBuffer();
|
||
|
return new AuthSwitchRequest({
|
||
|
pluginName: name,
|
||
|
pluginData: data
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = AuthSwitchRequest;
|