Commit f2d51eef9e751eeafa3acb5d0ceb8078db07d537
1 parent
a21e7a161e
Exists in
master
Ignore senders with '#'
Showing 1 changed file with 6 additions and 2 deletions Inline Diff
lib/modem-chooser.js
1 | 'use strict'; | 1 | 'use strict'; |
2 | 2 | ||
3 | const prefixes = require('./prefixes'); | 3 | const prefixes = require('./prefixes'); |
4 | const modems = require('./modems2'); | 4 | const modems = require('./modems2'); |
5 | const partnerLastSeen = require('./partner-last-seen'); | 5 | const partnerLastSeen = require('./partner-last-seen'); |
6 | 6 | ||
7 | function filterOutCandidates(candidates) { | 7 | function filterOutCandidates(candidates) { |
8 | if (!Array.isArray(candidates)) { | 8 | if (!Array.isArray(candidates)) { |
9 | return []; | 9 | return []; |
10 | } | 10 | } |
11 | 11 | ||
12 | return candidates.filter((item) => { | 12 | return candidates.filter((item) => { |
13 | const modem = modems.get('by_imsi', item); | 13 | if (item.indexOf('#') >= 0) return false; |
14 | 14 | ||
15 | const modem = modems.get('by_imsi', item); | ||
15 | if (!modem) return false; | 16 | if (!modem) return false; |
17 | |||
16 | return true; | 18 | return true; |
17 | }); | 19 | }); |
18 | } | 20 | } |
19 | 21 | ||
20 | exports.chooser = async function chooser(destination, config) { | 22 | exports.chooser = async function chooser(destination, config) { |
21 | const logger = global.KOMODO_LOGGER; | 23 | const logger = global.KOMODO_LOGGER; |
22 | 24 | ||
23 | const prefixName = await prefixes.lookup(destination); | 25 | const prefixName = await prefixes.lookup(destination); |
24 | if (logger) logger.verbose('Choosing suitable senders', { destination, prefixName }); | 26 | if (logger) logger.verbose('Choosing suitable senders', { destination, prefixName }); |
25 | 27 | ||
26 | let imsiSenders = []; | 28 | let imsiSenders = []; |
27 | if (config.imsi_senders && config.imsi_senders.prefix_names && config.imsi_senders.prefix_names[prefixName]) { | 29 | if (config.imsi_senders && config.imsi_senders.prefix_names && config.imsi_senders.prefix_names[prefixName]) { |
28 | imsiSenders = filterOutCandidates(config.imsi_senders.prefix_names[prefixName]); | 30 | imsiSenders = filterOutCandidates(config.imsi_senders.prefix_names[prefixName]); |
29 | if (logger) logger.verbose('Suitable senders by prefix name', { destination, prefixName, imsiSenders }); | 31 | if (logger) logger.verbose('Suitable senders by prefix name', { destination, prefixName, imsiSenders }); |
30 | } | 32 | } |
31 | 33 | ||
32 | if (!imsiSenders.length && config.imsi_senders.default && Array.isArray(config.imsi_senders.default) && config.imsi_senders.default.length) { | 34 | if (!imsiSenders.length && config.imsi_senders.default && Array.isArray(config.imsi_senders.default) && config.imsi_senders.default.length) { |
33 | imsiSenders = filterOutCandidates(config.imsi_senders.default); | 35 | imsiSenders = filterOutCandidates(config.imsi_senders.default); |
34 | if (logger) logger.verbose('Suitable default senders', { destination, prefixName, imsiSenders }); | 36 | if (logger) logger.verbose('Suitable default senders', { destination, prefixName, imsiSenders }); |
35 | } | 37 | } |
36 | 38 | ||
37 | if (!imsiSenders.length) { | 39 | if (!imsiSenders.length) { |
38 | imsiSenders = filterOutCandidates([ await partnerLastSeen.get(destination) ]); | 40 | imsiSenders = filterOutCandidates([ await partnerLastSeen.get(destination) ]); |
39 | if (logger) logger.verbose('Suitable senders by last seen', { destination, prefixName, imsiSenders }); | 41 | if (logger) logger.verbose('Suitable senders by last seen', { destination, prefixName, imsiSenders }); |
40 | } | 42 | } |
41 | 43 | ||
42 | if (!imsiSenders.length) { | 44 | if (!imsiSenders.length) { |
43 | if (logger) logger.verbose('No suitable sender found', { destination, prefixName }); | 45 | if (logger) logger.verbose('No suitable sender found', { destination, prefixName }); |
44 | return; | 46 | return; |
45 | } | 47 | } |
46 | 48 | ||
47 | const count = imsiSenders.length; | 49 | const count = imsiSenders.length; |
48 | const idx = Math.round(Math.random() * (count - 1)); | 50 | const idx = Math.round(Math.random() * (count - 1)); |
49 | const imsiChoosed = imsiSenders[idx]; | 51 | const imsiChoosed = imsiSenders[idx]; |
52 | |||
50 | if (logger) logger.verbose(`Choose modem with IMSI ${imsiChoosed}`, { destination, prefixName, imsiSenders }); | 53 | if (logger) logger.verbose(`Choose modem with IMSI ${imsiChoosed}`, { destination, prefixName, imsiSenders }); |
54 | |||
51 | return imsiChoosed; | 55 | return imsiChoosed; |
52 | } | 56 | } |