Commit 3f614b14accc8e6529fd48cab82dde7332945729

Authored by Adhidarma Hadiwinoto
1 parent 48edb4d589
Exists in master

MAX_SMS_LENGTH

Showing 1 changed file with 4 additions and 2 deletions Inline Diff

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