Commit 8fb5c92910d71c96d0e7781c2cc1ceb213e13ee1

Authored by Adhidarma Hadiwinoto
1 parent 1f7488895e
Exists in master

DEBUG

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

1 "use strict"; 1 "use strict";
2 2
3 const url = require('url'); 3 const url = require('url');
4 const request = require('request'); 4 const request = require('request');
5 const uuidv4 = require('uuid/v4'); 5 const uuidv4 = require('uuid/v4');
6 const moment = require('moment'); 6 const moment = require('moment');
7 7
8 const config = require('komodo-sdk/config'); 8 const config = require('komodo-sdk/config');
9 const logger = require('komodo-sdk/logger'); 9 const logger = require('komodo-sdk/logger');
10 10
11 const messagingService = require('komodo-center-messaging-client-lib'); 11 const messagingService = require('komodo-center-messaging-client-lib');
12 12
13 const modemSelect = require('./modemSelect'); 13 const modemSelect = require('./modemSelect');
14 const modems = require('./modems2'); 14 const modems = require('./modems2');
15 const partnerLastSeen = require('./partner-last-seen'); 15 const partnerLastSeen = require('./partner-last-seen');
16 const history = require('./history'); 16 const history = require('./history');
17 17
18 function _send(destinationNumber, msg, handlerIMSI) { 18 function _send(destinationNumber, msg, handlerIMSI) {
19 19
20 if (msg.length > 160) { 20 if (msg.length > 160) {
21 logger.info('Splitting message'); 21 logger.info('Splitting message');
22 22
23 const newMsg = msg.slice(0, 160); 23 const newMsg = msg.slice(0, 160);
24 const remainingMsg = msg.slice(160); 24 const remainingMsg = msg.slice(160);
25 25
26 _send(destinationNumber, newMsg, handlerIMSI); 26 _send(destinationNumber, newMsg, handlerIMSI);
27 setTimeout(() => { 27 setTimeout(() => {
28 _send(destinationNumber, remainingMsg, handlerIMSI); 28 _send(destinationNumber, remainingMsg, handlerIMSI);
29 }, 1000); 29 }, 1000);
30 30
31 return; 31 return;
32 } 32 }
33 33
34 const modem = modems.get('imsi', handlerIMSI); 34 const modem = modems.get('imsi', handlerIMSI);
35 if (!modem) { 35 if (!modem) {
36 logger.warn('Not knowing modem to use. Ignoring message', { destination_number: destinationNumber, msg: msg, modem_imsi: handlerIMSI }); 36 logger.warn('Not knowing modem to use. Ignoring message', { destination_number: destinationNumber, msg: msg, modem_imsi: handlerIMSI });
37 return; 37 return;
38 } 38 }
39 39
40 if (!modem.reportIp || !modem.reportPort || !modem.reportApikey) { 40 if (!modem.reportIp || !modem.reportPort || !modem.reportApikey) {
41 logger.warn('Invalid modem configuration', { modem }); 41 logger.warn('Invalid modem configuration', { modem });
42 return; 42 return;
43 } 43 }
44 44
45 const reqId = uuidv4(); 45 const reqId = uuidv4();
46 46
47 history.push({ 47 history.push({
48 ts: moment().format('YYYY-MM-DD HH:mm:ss'), 48 ts: moment().format('YYYY-MM-DD HH:mm:ss'),
49 modem: { 49 modem: {
50 name: modem.name, 50 name: modem.name,
51 imsi: modem.imsi, 51 imsi: modem.imsi,
52 msisdn: modem.msisdn, 52 msisdn: modem.msisdn,
53 }, 53 },
54 direction: 'OUTGOING', 54 direction: 'OUTGOING',
55 partner: destinationNumber, 55 partner: destinationNumber,
56 message: msg, 56 message: msg,
57 }); 57 });
58 58
59 logger.verbose('TRANSPORT: saving outgoing message');
59 messagingService.onIncomingMessage({ 60 messagingService.onIncomingMessage({
60 me: modem.name, 61 me: modem.name,
61 partner: destinationNumber, 62 partner: destinationNumber,
62 partner_raw: `+${destinationNumber}`.replace(/^\++/, '+'), 63 partner_raw: `+${destinationNumber}`.replace(/^\++/, '+'),
63 msg: msg, 64 msg: msg,
64 origin_label: `IMSI_${modem.imsi || 'UNKNOWN'}`, 65 origin_label: `IMSI_${modem.imsi || 'UNKNOWN'}`,
65 origin_transport: 'SMS', 66 origin_transport: 'SMS',
66 origin_partner: destinationNumber, 67 origin_partner: destinationNumber,
67 do_not_forward_to_core: true, 68 do_not_forward_to_core: true,
68 is_outgoing: true, 69 is_outgoing: true,
69 }); 70 });
70 71
71 const requestOptions = { 72 const requestOptions = {
72 url: url.format({ 73 url: url.format({
73 protocol: 'http', 74 protocol: 'http',
74 hostname: modem.reportIp, 75 hostname: modem.reportIp,
75 port: modem.reportPort, 76 port: modem.reportPort,
76 pathname: modem.reportPathSms || '/sms', 77 pathname: modem.reportPathSms || '/sms',
77 }), 78 }),
78 qs: { 79 qs: {
79 msg: msg, 80 msg: msg,
80 number: destinationNumber, 81 number: destinationNumber,
81 reqid: reqId, 82 reqid: reqId,
82 apikey: modem.reportApikey, 83 apikey: modem.reportApikey,
83 } 84 }
84 } 85 }
85 86
86 logger.info('Sending message to modem handler', { req_id: reqId, destination_number: destinationNumber, msg: msg, msg_length: msg.length, modem_name: modem.name, modem_imsi: modem.imsi }); 87 logger.info('Sending message to modem handler', { req_id: reqId, destination_number: destinationNumber, msg: msg, msg_length: msg.length, modem_name: modem.name, modem_imsi: modem.imsi });
87 request(requestOptions, function(err, res, body) { 88 request(requestOptions, function(err, res, body) {
88 if (err) { 89 if (err) {
89 logger.warn('Error requesting to modem handler. ' + err.toString(), { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi }); 90 logger.warn('Error requesting to modem handler. ' + err.toString(), { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi });
90 91
91 } 92 }
92 else if (res.statusCode != 200) { 93 else if (res.statusCode != 200) {
93 logger.warn('Modem handler not responding with HTTP status code 200.', { http_status_code: res.statusCode, req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi }); 94 logger.warn('Modem handler not responding with HTTP status code 200.', { http_status_code: res.statusCode, req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi });
94 } 95 }
95 else { 96 else {
96 logger.verbose('Message sent to handler', { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi, response_body: body }); 97 logger.verbose('Message sent to handler', { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi, response_body: body });
97 } 98 }
98 }) 99 })
99 100
100 } 101 }
101 102
102 async function send(partner, msg) { 103 async function send(partner, msg) {
103 if (!partner) return; 104 if (!partner) return;
104 105
105 if (typeof msg !== 'string') { 106 if (typeof msg !== 'string') {
106 logger.warn('Message to send is not a string, ignoring message'); 107 logger.warn('Message to send is not a string, ignoring message');
107 return; 108 return;
108 } 109 }
109 110
110 msg = msg.trim(); 111 msg = msg.trim();
111 if (!msg) return; 112 if (!msg) return;
112 113
113 const destinationNumber = modemSelect.removeSuffixFromNumber(partner, config); 114 const destinationNumber = modemSelect.removeSuffixFromNumber(partner, config);
114 115
115 // logger.verbose('Choosing handler name', { partner, destinationNumber, msg, origin }); 116 // logger.verbose('Choosing handler name', { partner, destinationNumber, msg, origin });
116 const handlerIMSI = await partnerLastSeen.get(destinationNumber) ; 117 const handlerIMSI = await partnerLastSeen.get(destinationNumber) ;
117 118
118 if (!handlerIMSI) { 119 if (!handlerIMSI) {
119 logger.warn(`Unknown handler for sending message to partner`, { partner, destinationNumber }); 120 logger.warn(`Unknown handler for sending message to partner`, { partner, destinationNumber });
120 return; 121 return;
121 } 122 }
122 123
123 _send(destinationNumber, msg, handlerIMSI); 124 _send(destinationNumber, msg, handlerIMSI);
124 } 125 }
125 126
126 exports.send = send; 127 exports.send = send;