Commit c256cbaaadf2859a34394abbbe156766f7bbdc54
1 parent
0ac029f514
Exists in
master
DEBUG on transport.send
Showing 1 changed file with 1 additions and 1 deletions Inline Diff
lib/transport.js
1 | "use strict"; | 1 | "use strict"; |
2 | 2 | ||
3 | const MAX_SMS_LENGTH = 140; | 3 | const MAX_SMS_LENGTH = 140; |
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 common = require('./common'); | 15 | const common = require('./common'); |
16 | const modems = require('./modems2'); | 16 | const modems = require('./modems2'); |
17 | const modemChooser = require('./modem-chooser'); | 17 | const modemChooser = require('./modem-chooser'); |
18 | // const partnerLastSeen = require('./partner-last-seen'); | 18 | // const partnerLastSeen = require('./partner-last-seen'); |
19 | const history = require('./history'); | 19 | const history = require('./history'); |
20 | const prefixes = require('./prefixes'); | 20 | const prefixes = require('./prefixes'); |
21 | const truncate = require('./truncate-paragraph'); | 21 | const truncate = require('./truncate-paragraph'); |
22 | 22 | ||
23 | function _send(destinationNumber, msg, handlerIMSI) { | 23 | function _send(destinationNumber, msg, handlerIMSI) { |
24 | 24 | ||
25 | if (msg.length > MAX_SMS_LENGTH) { | 25 | if (msg.length > MAX_SMS_LENGTH) { |
26 | logger.info('Splitting message'); | 26 | logger.info('Splitting message'); |
27 | 27 | ||
28 | /* | 28 | /* |
29 | const newMsg = msg.slice(0, MAX_SMS_LENGTH); | 29 | const newMsg = msg.slice(0, MAX_SMS_LENGTH); |
30 | const remainingMsg = msg.slice(MAX_SMS_LENGTH); | 30 | const remainingMsg = msg.slice(MAX_SMS_LENGTH); |
31 | */ | 31 | */ |
32 | 32 | ||
33 | const [newMsg, remainingMsg] = truncate(msg, MAX_SMS_LENGTH); | 33 | const [newMsg, remainingMsg] = truncate(msg, MAX_SMS_LENGTH); |
34 | logger.verbose('TRANSPORT: Truncate long message', {maxLength: MAX_SMS_LENGTH, original: msg, head: newMsg, tail: remainingMsg}); | 34 | logger.verbose('TRANSPORT: Truncate long message', {maxLength: MAX_SMS_LENGTH, original: msg, head: newMsg, tail: remainingMsg}); |
35 | 35 | ||
36 | _send(destinationNumber, newMsg, handlerIMSI); | 36 | _send(destinationNumber, newMsg, handlerIMSI); |
37 | setTimeout(() => { | 37 | setTimeout(() => { |
38 | _send(destinationNumber, remainingMsg, handlerIMSI); | 38 | _send(destinationNumber, remainingMsg, handlerIMSI); |
39 | }, 1000); | 39 | }, 1000); |
40 | 40 | ||
41 | return; | 41 | return; |
42 | } | 42 | } |
43 | 43 | ||
44 | const modem = modems.get('imsi', handlerIMSI); | 44 | const modem = modems.get('imsi', handlerIMSI); |
45 | if (!modem) { | 45 | if (!modem) { |
46 | logger.warn('Not knowing modem to use. Ignoring message', { destination_number: destinationNumber, msg: msg, modem_imsi: handlerIMSI }); | 46 | logger.warn('Not knowing modem to use. Ignoring message', { destination_number: destinationNumber, msg: msg, modem_imsi: handlerIMSI }); |
47 | return; | 47 | return; |
48 | } | 48 | } |
49 | 49 | ||
50 | if (!modem.reportIp || !modem.reportPort || !modem.reportApikey) { | 50 | if (!modem.reportIp || !modem.reportPort || !modem.reportApikey) { |
51 | logger.warn('Invalid modem configuration', { modem }); | 51 | logger.warn('Invalid modem configuration', { modem }); |
52 | return; | 52 | return; |
53 | } | 53 | } |
54 | 54 | ||
55 | const reqId = uuidv4(); | 55 | const reqId = uuidv4(); |
56 | 56 | ||
57 | history.push({ | 57 | history.push({ |
58 | ts: moment().format('YYYY-MM-DD HH:mm:ss'), | 58 | ts: moment().format('YYYY-MM-DD HH:mm:ss'), |
59 | modem: { | 59 | modem: { |
60 | name: modem.name, | 60 | name: modem.name, |
61 | imsi: modem.imsi, | 61 | imsi: modem.imsi, |
62 | msisdn: modem.msisdn, | 62 | msisdn: modem.msisdn, |
63 | }, | 63 | }, |
64 | direction: 'OUTGOING', | 64 | direction: 'OUTGOING', |
65 | partner: destinationNumber, | 65 | partner: destinationNumber, |
66 | message: msg, | 66 | message: msg, |
67 | }); | 67 | }); |
68 | 68 | ||
69 | logger.verbose('TRANSPORT: saving outgoing message'); | 69 | logger.verbose('TRANSPORT: saving outgoing message'); |
70 | messagingService.onIncomingMessage({ | 70 | messagingService.onIncomingMessage({ |
71 | me: modem.name, | 71 | me: modem.name, |
72 | partner: destinationNumber, | 72 | partner: destinationNumber, |
73 | partner_raw: `+${destinationNumber}`.replace(/^\++/, '+'), | 73 | partner_raw: `+${destinationNumber}`.replace(/^\++/, '+'), |
74 | msg: msg, | 74 | msg: msg, |
75 | origin_label: modem.imsi || 'UNKNOWN', | 75 | origin_label: modem.imsi || 'UNKNOWN', |
76 | origin_transport: 'SMS', | 76 | origin_transport: 'SMS', |
77 | origin_partner: destinationNumber, | 77 | origin_partner: destinationNumber, |
78 | do_not_forward_to_core: true, | 78 | do_not_forward_to_core: true, |
79 | is_outgoing: true, | 79 | is_outgoing: true, |
80 | }); | 80 | }); |
81 | 81 | ||
82 | const requestOptions = { | 82 | const requestOptions = { |
83 | url: url.format({ | 83 | url: url.format({ |
84 | protocol: 'http', | 84 | protocol: 'http', |
85 | hostname: modem.reportIp, | 85 | hostname: modem.reportIp, |
86 | port: modem.reportPort, | 86 | port: modem.reportPort, |
87 | pathname: modem.reportPathSms || '/sms', | 87 | pathname: modem.reportPathSms || '/sms', |
88 | }), | 88 | }), |
89 | qs: { | 89 | qs: { |
90 | msg: msg, | 90 | msg: msg, |
91 | number: destinationNumber, | 91 | number: destinationNumber, |
92 | reqid: reqId, | 92 | reqid: reqId, |
93 | apikey: modem.reportApikey, | 93 | apikey: modem.reportApikey, |
94 | } | 94 | } |
95 | } | 95 | } |
96 | 96 | ||
97 | 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 }); | 97 | 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 }); |
98 | request(requestOptions, function(err, res, body) { | 98 | request(requestOptions, function(err, res, body) { |
99 | if (err) { | 99 | if (err) { |
100 | logger.warn('Error requesting to modem handler. ' + err.toString(), { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi }); | 100 | logger.warn('Error requesting to modem handler. ' + err.toString(), { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi }); |
101 | 101 | ||
102 | } | 102 | } |
103 | else if (res.statusCode != 200) { | 103 | else if (res.statusCode != 200) { |
104 | 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 }); | 104 | 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 }); |
105 | } | 105 | } |
106 | else { | 106 | else { |
107 | logger.verbose('Message sent to handler', { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi, response_body: body }); | 107 | logger.verbose('Message sent to handler', { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi, response_body: body }); |
108 | } | 108 | } |
109 | }) | 109 | }) |
110 | 110 | ||
111 | } | 111 | } |
112 | 112 | ||
113 | async function send(partner, msg) { | 113 | async function send(partner, msg) { |
114 | if (!partner) return; | 114 | if (!partner) return; |
115 | 115 | ||
116 | if (typeof msg !== 'string') { | 116 | if (typeof msg !== 'string') { |
117 | logger.warn('Message to send is not a string, ignoring message'); | 117 | logger.warn('Message to send is not a string, ignoring message', { msg_type: typeof msg, msg }); |
118 | return; | 118 | return; |
119 | } | 119 | } |
120 | 120 | ||
121 | msg = msg.trim(); | 121 | msg = msg.trim(); |
122 | if (!msg) return; | 122 | if (!msg) return; |
123 | 123 | ||
124 | const destinationNumber = common.removeSuffixFromNumber(partner, config.number_suffix); | 124 | const destinationNumber = common.removeSuffixFromNumber(partner, config.number_suffix); |
125 | const prefixName = await prefixes.lookup(destinationNumber); | 125 | const prefixName = await prefixes.lookup(destinationNumber); |
126 | logger.verbose('Destination number prefix lookup', {partner: destinationNumber, prefix: prefixName}); | 126 | logger.verbose('Destination number prefix lookup', {partner: destinationNumber, prefix: prefixName}); |
127 | 127 | ||
128 | // logger.verbose('Choosing handler name', { partner, destinationNumber, msg, origin }); | 128 | // logger.verbose('Choosing handler name', { partner, destinationNumber, msg, origin }); |
129 | // const handlerIMSI = await partnerLastSeen.get(destinationNumber) ; | 129 | // const handlerIMSI = await partnerLastSeen.get(destinationNumber) ; |
130 | const handlerIMSI = await modemChooser.chooser(destinationNumber, config); | 130 | const handlerIMSI = await modemChooser.chooser(destinationNumber, config); |
131 | 131 | ||
132 | if (!handlerIMSI) { | 132 | if (!handlerIMSI) { |
133 | logger.warn(`Unknown handler for sending message to partner`, { partner, destinationNumber }); | 133 | logger.warn(`Unknown handler for sending message to partner`, { partner, destinationNumber }); |
134 | return; | 134 | return; |
135 | } | 135 | } |
136 | 136 | ||
137 | _send(destinationNumber, msg, handlerIMSI); | 137 | _send(destinationNumber, msg, handlerIMSI); |
138 | } | 138 | } |
139 | 139 | ||
140 | exports.send = send; | 140 | exports.send = send; |