Commit cc57ad0a7816d2fe68732d9e75116787ac780d07

Authored by Adhidarma Hadiwinoto
1 parent 524fb86bbd
Exists in master

send message on start

Showing 1 changed file with 12 additions and 1 deletions Inline Diff

1 var strftime = require('strftime'); 1 var strftime = require('strftime');
2 var request = require('request'); 2 var request = require('request');
3 var xmlparser = require('xml2js').parseString; 3 var xmlparser = require('xml2js').parseString;
4 var http = require('http'); 4 var http = require('http');
5 var url = require('url'); 5 var url = require('url');
6 6
7 var config; 7 var config;
8 var logger; 8 var logger;
9 var sendMessage;
9 10
10 function start(options) { 11 function start(options) {
12 try {
13 sendMessage = options.sendMessage;
14 }
15 catch(e) {
16 console.log('undefined send message. Exiting');
17 process.exit(2);
18 }
19
11 if (options && options.config) { 20 if (options && options.config) {
12 config = options.config; 21 config = options.config;
13 } 22 }
14 23
15 if (options && options.logger) { 24 if (options && options.logger) {
16 logger = options.logger; 25 logger = options.logger;
17 } 26 }
18 27
28
29
19 createHttpServer(); 30 createHttpServer();
20 } 31 }
21 32
22 function formatTimestamp(ms) { 33 function formatTimestamp(ms) {
23 return strftime('%F %T', new Date(ms)); 34 return strftime('%F %T', new Date(ms));
24 } 35 }
25 36
26 function onMessage(sender, message, ts, sendMessage) { 37 function onMessage(sender, message, ts) {
27 var opts = { 38 var opts = {
28 url: config.evo_url, 39 url: config.evo_url,
29 qs: { 40 qs: {
30 msg: message, 41 msg: message,
31 msisdn: sender, 42 msisdn: sender,
32 smsc: config.smsc, 43 smsc: config.smsc,
33 ts: formatTimestamp(ts) 44 ts: formatTimestamp(ts)
34 } 45 }
35 }; 46 };
36 47
37 logger.verbose("Forwarding message to evo", {request_opts: opts}); 48 logger.verbose("Forwarding message to evo", {request_opts: opts});
38 request(opts, function(err, response, body) { 49 request(opts, function(err, response, body) {
39 if (err) { 50 if (err) {
40 logger.warn('Error forwarding to evo: ' + err); 51 logger.warn('Error forwarding to evo: ' + err);
41 return; 52 return;
42 } 53 }
43 54
44 if (response.statusCode != 200) { 55 if (response.statusCode != 200) {
45 logger.warn('HTTP Status from evo: ' + response.statusCode, {status: response.statusCode, body: body}); 56 logger.warn('HTTP Status from evo: ' + response.statusCode, {status: response.statusCode, body: body});
46 return; 57 return;
47 } 58 }
48 59
49 logger.verbose('Got response from evo', {body: body}); 60 logger.verbose('Got response from evo', {body: body});
50 61
51 xmlparser(body, function(xmlerr, parsedResponse) { 62 xmlparser(body, function(xmlerr, parsedResponse) {
52 if (xmlerr) { 63 if (xmlerr) {
53 logger.verbose('Evo response not in xml format'); 64 logger.verbose('Evo response not in xml format');
54 return; 65 return;
55 } 66 }
56 67
57 return; 68 return;
58 69
59 logger.info('Evo response in xml format', {response: parsedResponse}); 70 logger.info('Evo response in xml format', {response: parsedResponse});
60 if (parsedResponse.response.text) { 71 if (parsedResponse.response.text) {
61 sendMessage(sender, parsedResponse.response.text[0].trim()); 72 sendMessage(sender, parsedResponse.response.text[0].trim());
62 } 73 }
63 }); 74 });
64 }); 75 });
65 } 76 }
66 77
67 function onHttpIncomingMessage(request, response) { 78 function onHttpIncomingMessage(request, response) {
68 var qs = url.parse(request.url, true).query; 79 var qs = url.parse(request.url, true).query;
69 logger.verbose("onHttpIncomingMessage()", {qs: qs}); 80 logger.verbose("onHttpIncomingMessage()", {qs: qs});
70 81
71 var destination = qs.to.replace(config.msisdn_suffix, ''); 82 var destination = qs.to.replace(config.msisdn_suffix, '');
72 logger.info('Sending message to ' + destination + ': ' + qs.msg); 83 logger.info('Sending message to ' + destination + ': ' + qs.msg);
73 sendMessage(destination, qs.msg); 84 sendMessage(destination, qs.msg);
74 response.end('OK'); 85 response.end('OK');
75 } 86 }
76 87
77 function createHttpServer() { 88 function createHttpServer() {
78 logger.verbose('createHttpServer()'); 89 logger.verbose('createHttpServer()');
79 90
80 var httpServer = http.createServer(onHttpIncomingMessage); 91 var httpServer = http.createServer(onHttpIncomingMessage);
81 httpServer.listen(config.listen_port, function(){ 92 httpServer.listen(config.listen_port, function(){
82 logger.info("HTTP server listening on " + config.listen_port); 93 logger.info("HTTP server listening on " + config.listen_port);
83 }); 94 });
84 } 95 }
85 96
86 exports.start = start; 97 exports.start = start;
87 exports.formatTimestamp = formatTimestamp; 98 exports.formatTimestamp = formatTimestamp;
88 exports.onMessage = onMessage; 99 exports.onMessage = onMessage;
89 100