tds
Version:
TDS client for connecting to Microsoft SQL Server
94 lines (83 loc) • 2.72 kB
JavaScript
/**
Base class for all TDS packets
*/
exports.Packet = (function() {
function Packet() {}
Packet.retrieveHeader = function(stream, context) {
var ret;
ret = {
type: stream.readByte(),
status: stream.readByte(),
length: stream.readUInt16BE(),
processId: stream.readUInt16BE(),
packetId: stream.readByte(),
window: stream.readByte()
};
if (context.logDebug) console.log('Retrieved header: ', ret);
return ret;
};
Packet.prototype.fromBuffer = function(stream, context) {
throw new Error('Unimplemented');
};
Packet.prototype.toBuffer = function(builder, context) {
throw new Error('Unimplemented');
};
Packet.prototype.insertPacketHeader = function(builder, context, endOfMessage) {
if (endOfMessage == null) endOfMessage = true;
if (context.logDebug) console.log('Inserting header for type: ', this.type);
builder.insertByte(this.type, 0);
builder.insertByte((endOfMessage ? 1 : 0), 1);
builder.insertUInt16BE(builder.length + 6, 2);
builder.insertUInt16BE(0, 3);
builder.insertByte(1, 4);
builder.insertByte(0, 5);
return builder;
};
Packet.prototype.buildTransactionDescriptorAllHeader = function(transactionDescriptor, outstandingRequestCount) {
return {
type: 2,
transactionDescriptor: transactionDescriptor,
outstandingRequestCount: outstandingRequestCount
};
};
Packet.prototype.insertAllHeaders = function(builder, context, headers) {
var header, length, offset, _i, _len;
offset = 0;
length = 0;
for (_i = 0, _len = headers.length; _i < _len; _i++) {
header = headers[_i];
switch (header.type) {
case 2:
length += 12;
builder.insertUInt32LE(12, offset);
offset += 4;
builder.insertUInt16LE(header.type, offset);
offset += 2;
builder.insertUInt32LE(header.transactionDescriptor % 0x100000000, offset);
offset += 4;
builder.insertUInt32LE(header.transactionDescriptor / 0x100000000, offset);
offset += 4;
builder.insertUInt32LE(header.outstandingRequestCount, offset);
offset += 4;
break;
default:
throw new Error('Unsupported all header type ' + header.type);
}
}
return builder.insertUInt32LE(length + 4, 0);
};
Packet.prototype.toString = function() {
var key, ret, util, value;
ret = '';
util = require('util');
for (key in this) {
value = this[key];
if (typeof value !== 'function') {
if (ret !== '') ret += ', ';
ret += key + ': ' + util.format(value);
}
}
return ret;
};
return Packet;
})();