Commit 3f614b14accc8e6529fd48cab82dde7332945729
1 parent
48edb4d589
Exists in
master
MAX_SMS_LENGTH
Showing 1 changed file with 4 additions and 2 deletions Inline Diff
lib/transport.js
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; |