Commit 0a68c7befaa124be40b276a5b42da5c9ded98d6f
1 parent
6aecd3f487
Exists in
master
and in
1 other branch
TRANSPORT sending to modem use prefix rules.
Can be bypass by config.ignore_prefix
Showing 1 changed file with 1 additions and 1 deletions Inline Diff
lib/transport.js
1 | const axios = require('axios'); | 1 | const axios = require('axios'); |
2 | const moment = require('moment'); | 2 | const moment = require('moment'); |
3 | const uniqid = require('uniqid'); | 3 | const uniqid = require('uniqid'); |
4 | 4 | ||
5 | const config = require('komodo-sdk/config'); | 5 | const config = require('komodo-sdk/config'); |
6 | const logger = require('komodo-sdk/logger'); | 6 | const logger = require('komodo-sdk/logger'); |
7 | const messagingClient = require('komodo-center-messaging-client-lib'); | 7 | const messagingClient = require('komodo-center-messaging-client-lib'); |
8 | 8 | ||
9 | const modems = require('./modems'); | 9 | const modems = require('./modems'); |
10 | const messageSplitter = require('./message-splitter'); | 10 | const messageSplitter = require('./message-splitter'); |
11 | const modemLocks = require('./modem-locks'); | 11 | const modemLocks = require('./modem-locks'); |
12 | 12 | ||
13 | async function sleep(ms) { | 13 | async function sleep(ms) { |
14 | return new Promise((resolve) => { | 14 | return new Promise((resolve) => { |
15 | setTimeout(() => { | 15 | setTimeout(() => { |
16 | resolve(); | 16 | resolve(); |
17 | }, ms); | 17 | }, ms); |
18 | }); | 18 | }); |
19 | } | 19 | } |
20 | 20 | ||
21 | async function sendToModem(partner, msg, modem, parentXid, part) { | 21 | async function sendToModem(partner, msg, modem, parentXid, part) { |
22 | const xid = parentXid || uniqid(); | 22 | const xid = parentXid || uniqid(); |
23 | 23 | ||
24 | const [msgHead, msgTail] = messageSplitter(msg.trim(), Number(config.max_length) || 140); | 24 | const [msgHead, msgTail] = messageSplitter(msg.trim(), Number(config.max_length) || 140); |
25 | if (!msgHead) { | 25 | if (!msgHead) { |
26 | return; | 26 | return; |
27 | } | 27 | } |
28 | 28 | ||
29 | logger.info('TRANSPORT: Sending message to EVO-CP', { | 29 | logger.info('TRANSPORT: Sending message to EVO-CP', { |
30 | xid, | 30 | xid, |
31 | partner, | 31 | partner, |
32 | msg: msgHead, | 32 | msg: msgHead, |
33 | msgLength: msgHead.length, | 33 | msgLength: msgHead.length, |
34 | tailLength: msgTail.length, | 34 | tailLength: msgTail.length, |
35 | part, | 35 | part, |
36 | modem: modem.name, | 36 | modem: modem.name, |
37 | }); | 37 | }); |
38 | 38 | ||
39 | await modemLocks.lock(modem.name); | 39 | await modemLocks.lock(modem.name); |
40 | 40 | ||
41 | try { | 41 | try { |
42 | await axios.get(modem.url || config.sender.url, { | 42 | await axios.get(modem.url || config.sender.url, { |
43 | params: { | 43 | params: { |
44 | to: partner, | 44 | to: partner, |
45 | password: modem.password || config.sender.password, | 45 | password: modem.password || config.sender.password, |
46 | ts: moment().format('YYYY-MM-DD HH:mm:ss'), | 46 | ts: moment().format('YYYY-MM-DD HH:mm:ss'), |
47 | text: msgHead, | 47 | text: msgHead, |
48 | modem: modem.name, | 48 | modem: modem.name, |
49 | username: modem.username || config.sender.username, | 49 | username: modem.username || config.sender.username, |
50 | }, | 50 | }, |
51 | }); | 51 | }); |
52 | } catch (e) { | 52 | } catch (e) { |
53 | logger.warn('TRANSPORT: Exception on sending message to EVO-CP', { | 53 | logger.warn('TRANSPORT: Exception on sending message to EVO-CP', { |
54 | xid, | 54 | xid, |
55 | partner, | 55 | partner, |
56 | msgHead, | 56 | msgHead, |
57 | modem: modem.name, | 57 | modem: modem.name, |
58 | e: e.message, | 58 | e: e.message, |
59 | }); | 59 | }); |
60 | } | 60 | } |
61 | 61 | ||
62 | messagingClient.onIncomingMessage({ | 62 | messagingClient.onIncomingMessage({ |
63 | me: modem.imsi || modem.name, | 63 | me: modem.imsi || modem.name, |
64 | partner, | 64 | partner, |
65 | partner_raw: partner, | 65 | partner_raw: partner, |
66 | msg: msgHead, | 66 | msg: msgHead, |
67 | origin_label: modem.imsi || modem.name, | 67 | origin_label: modem.imsi || modem.name, |
68 | origin_transport: 'SMS', | 68 | origin_transport: 'SMS', |
69 | origin_partner: partner, | 69 | origin_partner: partner, |
70 | do_not_forward_to_core: true, | 70 | do_not_forward_to_core: true, |
71 | is_outgoing: true, | 71 | is_outgoing: true, |
72 | }); | 72 | }); |
73 | 73 | ||
74 | await sleep(1200); | 74 | await sleep(1200); |
75 | modemLocks.unlock(modem.name); | 75 | modemLocks.unlock(modem.name); |
76 | 76 | ||
77 | if (msgTail) { | 77 | if (msgTail) { |
78 | await sendToModem(partner, msgTail, modem, part + 1); | 78 | await sendToModem(partner, msgTail, modem, part + 1); |
79 | } | 79 | } |
80 | } | 80 | } |
81 | 81 | ||
82 | exports.send = async (partner, msg) => { | 82 | exports.send = async (partner, msg) => { |
83 | if (typeof partner !== 'string' || !partner.trim()) return; | 83 | if (typeof partner !== 'string' || !partner.trim()) return; |
84 | if (typeof msg !== 'string' || !msg.trim()) return; | 84 | if (typeof msg !== 'string' || !msg.trim()) return; |
85 | 85 | ||
86 | if (msg.trim().search(/PROSES$/) >= 0) return; | 86 | if (msg.trim().search(/PROSES$/) >= 0) return; |
87 | 87 | ||
88 | const xid = uniqid(); | 88 | const xid = uniqid(); |
89 | logger.info('TRANSPORT: Got CORE message to forward to EVO-CP', { | 89 | logger.info('TRANSPORT: Got CORE message to forward to EVO-CP', { |
90 | xid, | 90 | xid, |
91 | partner, | 91 | partner, |
92 | msg, | 92 | msg, |
93 | }); | 93 | }); |
94 | 94 | ||
95 | const modem = modems.randomModem(); | 95 | const modem = config.ignore_prefix ? modems.randomModem() : modems.randomModemByPrefix(partner); |
96 | if (!modem) { | 96 | if (!modem) { |
97 | logger.warn('TRANSPORT: Not sending message to EVO-CP because of no available modem', { | 97 | logger.warn('TRANSPORT: Not sending message to EVO-CP because of no available modem', { |
98 | xid, | 98 | xid, |
99 | partner, | 99 | partner, |
100 | msg, | 100 | msg, |
101 | }); | 101 | }); |
102 | return; | 102 | return; |
103 | } | 103 | } |
104 | 104 | ||
105 | await sendToModem(partner, msg.trim(), modem, xid, 1); | 105 | await sendToModem(partner, msg.trim(), modem, xid, 1); |
106 | }; | 106 | }; |
107 | 107 |