Telegram Web, preconfigured for usage in I2P. http://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.7 KiB

11 years ago
var http = require('http');
var constant = require('./constants');
var helper = require('./helper');
var cfg = require('./config');
var parseExitCode = function(buffer, defaultCode) {
var tailPos = buffer.length - Buffer.byteLength(constant.EXIT_CODE) - 1;
if (tailPos < 0) {
return defaultCode;
}
// tail buffer which might contain the message
var tail = buffer.slice(tailPos);
var tailStr = tail.toString();
if (tailStr.substr(0, tailStr.length - 1) === constant.EXIT_CODE) {
tail.fill('\x00');
return parseInt(tailStr.substr(-1), 10);
}
return defaultCode;
};
// TODO(vojta): read config file (port, host, urlRoot)
exports.run = function(config, done) {
done = helper.isFunction(done) ? done : process.exit;
config = cfg.parseConfig(config.configFile, config);
var exitCode = 1;
var options = {
hostname: config.hostname,
path: config.urlRoot + 'run',
port: config.port,
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
};
var request = http.request(options, function(response) {
response.on('data', function(buffer) {
exitCode = parseExitCode(buffer, exitCode);
process.stdout.write(buffer);
});
response.on('end', function() {
done(exitCode);
});
});
request.on('error', function(e) {
if (e.code === 'ECONNREFUSED') {
console.error('There is no server listening on port %d', options.port);
done(1);
} else {
throw e;
}
});
request.end(JSON.stringify({
args: config.clientArgs,
removedFiles: config.removedFiles,
changedFiles: config.changedFiles,
addedFiles: config.addedFiles,
refresh: config.refresh
}));
};