Commit 98fa55b40fa585a1d7502e5752d92533dd8a5448

Authored by Adhidarma Hadiwinoto
1 parent 4acd86be1e
Exists in master

Buang modemSelect.js

Showing 3 changed files with 8 additions and 36 deletions Inline Diff

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