var strftime = require('strftime'); var request = require('request'); var xmlparser = require('xml2js').parseString; var http = require('http'); var url = require('url'); var config; var logger; var sendMessage; function start(options) { try { sendMessage = options.sendMessage; } catch(e) { console.log('undefined send message. Exiting'); process.exit(2); } if (options && options.config) { config = options.config; } if (options && options.logger) { logger = options.logger; } createHttpServer(); } function formatTimestamp(ms) { return strftime('%F %T', new Date(ms)); } function onMessage(sender, message, ts) { var opts = { url: config.evo_url, qs: { msg: message, msisdn: sender, smsc: config.smsc, ts: formatTimestamp(ts) } }; logger.verbose("Forwarding message to evo", {request_opts: opts}); request(opts, function(err, response, body) { if (err) { logger.warn('Error forwarding to evo: ' + err); return; } if (response.statusCode != 200) { logger.warn('HTTP Status from evo: ' + response.statusCode, {status: response.statusCode, body: body}); return; } logger.verbose('Got response from evo', {body: body}); xmlparser(body, function(xmlerr, parsedResponse) { if (xmlerr) { logger.verbose('Evo response not in xml format'); return; } return; logger.info('Evo response in xml format', {response: parsedResponse}); if (parsedResponse.response.text) { sendMessage(sender, parsedResponse.response.text[0].trim()); } }); }); } function onHttpIncomingMessage(request, response) { var qs = url.parse(request.url, true).query; logger.verbose("onHttpIncomingMessage()", {qs: qs}); //var destination = qs.to.replace(config.msisdn_suffix, ''); logger.info('Sending message to ' + qs.to + ': ' + (qs.msg || qs.text)); sendMessage(qs.to, qs.msg || qs.text); response.end('OK'); } function createHttpServer() { logger.verbose('createHttpServer()'); var httpServer = http.createServer(onHttpIncomingMessage); httpServer.listen(config.listen_port, function(){ logger.info("HTTP server listening on " + config.listen_port); }); } exports.start = start; exports.formatTimestamp = formatTimestamp; exports.onMessage = onMessage;