Files
server_debian_macro/node_modules/tedious/lib/token/env-change-token-parser.js

190 lines
21 KiB
JavaScript
Raw Normal View History

2025-02-18 22:59:07 +00:00
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _collation = require("../collation");
var _token = require("./token");
var _helpers = require("./helpers");
const types = {
1: {
name: 'DATABASE',
event: 'databaseChange'
},
2: {
name: 'LANGUAGE',
event: 'languageChange'
},
3: {
name: 'CHARSET',
event: 'charsetChange'
},
4: {
name: 'PACKET_SIZE',
event: 'packetSizeChange'
},
7: {
name: 'SQL_COLLATION',
event: 'sqlCollationChange'
},
8: {
name: 'BEGIN_TXN',
event: 'beginTransaction'
},
9: {
name: 'COMMIT_TXN',
event: 'commitTransaction'
},
10: {
name: 'ROLLBACK_TXN',
event: 'rollbackTransaction'
},
13: {
name: 'DATABASE_MIRRORING_PARTNER',
event: 'partnerNode'
},
17: {
name: 'TXN_ENDED'
},
18: {
name: 'RESET_CONNECTION',
event: 'resetConnection'
},
20: {
name: 'ROUTING_CHANGE',
event: 'routingChange'
}
};
function _readNewAndOldValue(buf, offset, length, type) {
switch (type.name) {
case 'DATABASE':
case 'LANGUAGE':
case 'CHARSET':
case 'PACKET_SIZE':
case 'DATABASE_MIRRORING_PARTNER':
{
let newValue;
({
offset,
value: newValue
} = (0, _helpers.readBVarChar)(buf, offset));
let oldValue;
({
offset,
value: oldValue
} = (0, _helpers.readBVarChar)(buf, offset));
switch (type.name) {
case 'PACKET_SIZE':
return new _helpers.Result(new _token.PacketSizeEnvChangeToken(parseInt(newValue), parseInt(oldValue)), offset);
case 'DATABASE':
return new _helpers.Result(new _token.DatabaseEnvChangeToken(newValue, oldValue), offset);
case 'LANGUAGE':
return new _helpers.Result(new _token.LanguageEnvChangeToken(newValue, oldValue), offset);
case 'CHARSET':
return new _helpers.Result(new _token.CharsetEnvChangeToken(newValue, oldValue), offset);
case 'DATABASE_MIRRORING_PARTNER':
return new _helpers.Result(new _token.DatabaseMirroringPartnerEnvChangeToken(newValue, oldValue), offset);
}
throw new Error('unreachable');
}
case 'SQL_COLLATION':
case 'BEGIN_TXN':
case 'COMMIT_TXN':
case 'ROLLBACK_TXN':
case 'RESET_CONNECTION':
{
let newValue;
({
offset,
value: newValue
} = (0, _helpers.readBVarByte)(buf, offset));
let oldValue;
({
offset,
value: oldValue
} = (0, _helpers.readBVarByte)(buf, offset));
switch (type.name) {
case 'SQL_COLLATION':
{
const newCollation = newValue.length ? _collation.Collation.fromBuffer(newValue) : undefined;
const oldCollation = oldValue.length ? _collation.Collation.fromBuffer(oldValue) : undefined;
return new _helpers.Result(new _token.CollationChangeToken(newCollation, oldCollation), offset);
}
case 'BEGIN_TXN':
return new _helpers.Result(new _token.BeginTransactionEnvChangeToken(newValue, oldValue), offset);
case 'COMMIT_TXN':
return new _helpers.Result(new _token.CommitTransactionEnvChangeToken(newValue, oldValue), offset);
case 'ROLLBACK_TXN':
return new _helpers.Result(new _token.RollbackTransactionEnvChangeToken(newValue, oldValue), offset);
case 'RESET_CONNECTION':
return new _helpers.Result(new _token.ResetConnectionEnvChangeToken(newValue, oldValue), offset);
}
throw new Error('unreachable');
}
case 'ROUTING_CHANGE':
{
let routePacket;
({
offset,
value: routePacket
} = (0, _helpers.readUsVarByte)(buf, offset));
let oldValue;
({
offset,
value: oldValue
} = (0, _helpers.readUsVarByte)(buf, offset));
// Routing Change:
// Byte 1: Protocol (must be 0)
// Bytes 2-3 (USHORT): Port number
// Bytes 4-5 (USHORT): Length of server data in unicode (2byte chars)
// Bytes 6-*: Server name in unicode characters
const protocol = routePacket.readUInt8(0);
if (protocol !== 0) {
throw new Error('Unknown protocol byte in routing change event');
}
const port = routePacket.readUInt16LE(1);
const serverLen = routePacket.readUInt16LE(3);
// 2 bytes per char, starting at offset 5
const server = routePacket.toString('ucs2', 5, 5 + serverLen * 2);
const newValue = {
protocol: protocol,
port: port,
server: server
};
return new _helpers.Result(new _token.RoutingEnvChangeToken(newValue, oldValue), offset);
}
default:
{
console.error('Tedious > Unsupported ENVCHANGE type ' + type.name);
// skip unknown bytes
return new _helpers.Result(undefined, offset + length - 1);
}
}
}
function envChangeParser(buf, offset, _options) {
let tokenLength;
({
offset,
value: tokenLength
} = (0, _helpers.readUInt16LE)(buf, offset));
if (buf.length < offset + tokenLength) {
throw new _helpers.NotEnoughDataError(offset + tokenLength);
}
let typeNumber;
({
offset,
value: typeNumber
} = (0, _helpers.readUInt8)(buf, offset));
const type = types[typeNumber];
if (!type) {
console.error('Tedious > Unsupported ENVCHANGE type ' + typeNumber);
return new _helpers.Result(undefined, offset + tokenLength - 1);
}
return _readNewAndOldValue(buf, offset, tokenLength, type);
}
var _default = exports.default = envChangeParser;
module.exports = envChangeParser;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29sbGF0aW9uIiwicmVxdWlyZSIsIl90b2tlbiIsIl9oZWxwZXJzIiwidHlwZXMiLCJuYW1lIiwiZXZlbnQiLCJfcmVhZE5ld0FuZE9sZFZhbHVlIiwiYnVmIiwib2Zmc2V0IiwibGVuZ3RoIiwidHlwZSIsIm5ld1ZhbHVlIiwidmFsdWUiLCJyZWFkQlZhckNoYXIiLCJvbGRWYWx1ZSIsIlJlc3VsdCIsIlBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbiIsInBhcnNlSW50IiwiRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbiIsIkxhbmd1YWdlRW52Q2hhbmdlVG9rZW4iLCJDaGFyc2V0RW52Q2hhbmdlVG9rZW4iLCJEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbiIsIkVycm9yIiwicmVhZEJWYXJCeXRlIiwibmV3Q29sbGF0aW9uIiwiQ29sbGF0aW9uIiwiZnJvbUJ1ZmZlciIsInVuZGVmaW5lZCIsIm9sZENvbGxhdGlvbiIsIkNvbGxhdGlvbkNoYW5nZVRva2VuIiwiQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuIiwiQ29tbWl0VHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbiIsIlJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbiIsIlJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuIiwicm91dGVQYWNrZXQiLCJyZWFkVXNWYXJCeXRlIiwicHJvdG9jb2wiLCJyZWFkVUludDgiLCJwb3J0IiwicmVhZFVJbnQxNkxFIiwic2VydmVyTGVuIiwic2VydmVyIiwidG9TdHJpbmciLCJSb3V0aW5nRW52Q2hhbmdlVG9rZW4iLCJjb25zb2xlIiwiZXJyb3IiLCJlbnZDaGFuZ2VQYXJzZXIiLCJfb3B0aW9ucyIsInRva2VuTGVuZ3RoIiwiTm90RW5vdWdoRGF0YUVycm9yIiwidHlwZU51bWJlciIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vZW52LWNoYW5nZS10b2tlbi1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi9zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4uL2NvbGxhdGlvbic7XG5cbmltcG9ydCB7XG4gIERhdGFiYXNlRW52Q2hhbmdlVG9rZW4sXG4gIExhbmd1YWdlRW52Q2hhbmdlVG9rZW4sXG4gIENoYXJzZXRFbnZDaGFuZ2VUb2tlbixcbiAgUGFja2V0U2l6ZUVudkNoYW5nZVRva2VuLFxuICBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4sXG4gIFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbixcbiAgRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyRW52Q2hhbmdlVG9rZW4sXG4gIFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSb3V0aW5nRW52Q2hhbmdlVG9rZW4sXG4gIENvbGxhdGlvbkNoYW5nZVRva2VuLFxuICB0eXBlIEVudkNoYW5nZVRva2VuXG59IGZyb20gJy4vdG9rZW4nO1xuXG5pbXBvcnQgeyBOb3RFbm91Z2hEYXRhRXJyb3IsIHJlYWRCVmFyQnl0ZSwgcmVhZEJWYXJDaGFyLCByZWFkVUludDE2TEUsIHJlYWRVSW50OCwgcmVhZFVzVmFyQnl0ZSwgUmVzdWx0IH0gZnJvbSAnLi9oZWxwZXJzJztcblxuY29uc3QgdHlwZXM6IHsgW2tleTogbnVtYmVyXTogeyBuYW1lOiBzdHJpbmcsIGV2ZW50Pzogc3RyaW5nIH19ID0ge1xuICAxOiB7XG4gICAgbmFtZTogJ0RBVEFCQVNFJyxcbiAgICBldmVudDogJ2RhdGFiYXNlQ2hhbmdlJ1xuICB9LFxuICAyOiB7XG4gICAgbmFtZTogJ0xBTkdVQUdFJyxcbiAgICBldmVudDogJ2xhbmd1YWdlQ2hhbmdlJ1xuICB9LFxuICAzOiB7XG4gICAgbmFtZTogJ0NIQVJTRVQnLFxuICAgIGV2ZW50OiAnY2hhcnNldENoYW5nZSdcbiAgfSxcbiAgNDoge1xuICAgIG5hbWU6ICdQQUNLRVRfU0laRScsXG4gICAgZXZlbnQ6ICdwYWNrZXRTaXplQ2hhbmdlJ1xuICB9LFxuICA3OiB7XG4gICAgbmFtZTogJ1NRTF9DT0xMQVRJT04nLFxuICAgIGV2ZW50OiAnc3FsQ29sbGF0aW9uQ2hhbmdlJ1xuICB9LFxuICA4OiB7XG4gICAgbmFtZTogJ0JFR0lOX1RYTicsXG4gICAgZXZlbnQ6ICdiZWdpblRyYW5zYWN0aW9uJ1xuICB9LFxuICA5OiB7XG4gICAgbmFtZTogJ0NPTU1JVF9UWE4nLFxuICAgIGV2ZW50OiAnY29tbWl0VHJhbnNhY3Rpb24nXG4gIH0sXG4gIDEwOiB7XG4gICAgbmFtZTogJ1JPTExCQUNLX1RYTicsXG4gICAgZXZlbnQ6ICdyb2xsYmFja1RyYW5zYWN0aW9uJ1xuICB9LFxuICAxMzoge1xuICAgIG5hbWU6ICdEQVRBQkFTRV9NSVJST1JJTkdfUEFSVE5FUicsXG4gICAgZXZlbnQ6ICdwYXJ0bmVyTm9kZSdcbiAgfSxcbiAgMTc6IHtcbiAgICBuYW1lOiAnVFhOX0VOREVEJ1xuICB9LFxuICAxODoge1xuICAgIG5hbWU6ICdSRVNFVF9DT05ORUNUSU9OJyxcbiAgICBldmVudDogJ3Jlc2V0Q29ubmVjdGlvbidcbiAgfSxcbiAgMjA6IHtcbiAgICBuYW1lOiAnUk9VVElOR19DSEFOR0UnLFxuICAgIGV2ZW50OiAncm91dGluZ0NoYW5nZSdcbiAgfVxufTtcblxuZnVuY3Rpb24gX3JlYWROZXdBbmRPbGRWYWx1ZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCB0eXBlOiB7IG5hbWU6IHN0cmluZywgZXZlbnQ/OiBzdHJpbmcgfSk6IFJlc3VsdDxFbnZDaGFuZ2VUb2tlbiB8IHVuZGVmaW5lZD4ge1xuICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgIGNhc2UgJ0RBVEFCQVNFJzpcbiAgICBjYXNlICdMQU5HVUFHRSc6XG4gICAgY2FzZSAnQ0hBUlNFVCc6XG4gICAgY2FzZSAnUEFDS0VUX1NJWkUnOlxuICAgIGNhc2UgJ0RBVEFCQVNFX01JUlJPUklOR19QQVJUTkVSJzoge1xuICAgICAgbGV0IG5ld1ZhbHVlO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogbmV3VmFsdWUgfSA9IHJlYWRCVmFyQ2hhcihidWYsIG9mZnNldCkpO1xuXG4gICAgICBsZXQgb2xkVmFsdWU7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBvbGRWYWx1ZSB9ID0gcmVhZEJWYXJDaGFyKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHN3aXRjaCAodHlwZS5uYW1lKSB7XG4gICAgICAgIGNhc2UgJ1BBQ0tFVF9TSVpFJzpcbiAgICAgICAgICByZXR