tsdns
Version:
TeamSpeak™ 3 DNS (TSDNS) implementation for Node.js
85 lines (77 loc) • 2 kB
JavaScript
import TSDNS from './';
import { connect } from 'net';
/**
* Default timeout for a test request.
* @type {Number}
*/
const TIMEOUT = 2000;
/**
* Send a test request.
* @param {Number} port
* @param {String} raw
* @param {Number} timeout Optional.
* @return {Promise}
*/
function sendRequest(port, raw, timeout = TIMEOUT) {
return new Promise((resolve, reject) => {
let socket = connect(port)
.setEncoding('utf8')
.setNoDelay(true)
.setTimeout(timeout)
.on('data', resolve)
.on('error', reject)
.on('connect', () => socket.write(raw))
.on('connect', () => console.log('REQ', raw));
});
}
/**
* Execute a test.
* @param {Number} port
* @param {String} request
* @param {String|Boolean} expected
* @return {Promise}
*/
function test(port, request, expected) {
return sendRequest(port, request)
.then((response) => new Promise((resolve, reject) => {
if (response === expected) {
resolve({ response, request, expected });
} else {
reject({ response, request, expected });
}
}))
.catch((reason) => new Promise((resolve, reject) => {
if (!expected) {
resolve({ response: null, request, expected, reason });
} else {
reject({ response: null, request, expected, reason });
}
}));
}
/**
* Create a new TSDNS instance.
* @type {TSDNS}
*/
let tsdns = new TSDNS();
/**
* Get the port.
* @type {Number}
*/
let { port } = tsdns.address();
/**
* Handle a request.
*/
tsdns.on('request', ({ host, port, raw, respond, remoteAddress, remotePort }) => {
console.log('REQ', { host, port, raw, remoteAddress, remotePort });
respond('123.45.67.89', 9987);
});
/**
* Test request.
*/
test(port, 'veltro.de:9987', '123.45.67.89:9987')
.then((result) => {
console.log('SUCCESS', result);
})
.catch((result) => {
console.log('FAILURE', result);
});