Commit 405087dd50d55c498899bf4b4bb8123ce20f91ad
1 parent
b794b32af9
Exists in
master
Fix null retry by using OR 0
Showing 1 changed file with 14 additions and 5 deletions Inline Diff
transport.js
1 | process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; | 1 | process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; |
2 | 2 | ||
3 | const module_name = require('path').basename(__filename); | 3 | const module_name = require('path').basename(__filename); |
4 | 4 | ||
5 | const http = require('http'); | 5 | const http = require('http'); |
6 | const url = require('url'); | 6 | const url = require('url'); |
7 | const request = require('request'); | 7 | const request = require('request'); |
8 | 8 | ||
9 | const config = require('komodo-sdk/config') | 9 | const config = require('komodo-sdk/config') |
10 | const logger = require('komodo-sdk/logger'); | 10 | const logger = require('komodo-sdk/logger'); |
11 | 11 | ||
12 | let _callback; | 12 | let _callback; |
13 | 13 | ||
14 | const maxSendRetry = Number(config.max_send_retry) || 5; | 14 | const maxSendRetry = Number(config.max_send_retry) || 5; |
15 | const sleepBeforeRetryMs = (Number(config.sleep_before_retry_secs) || 60) * 1000; | 15 | const sleepBeforeRetryMs = (Number(config.sleep_before_retry_secs) || 60) * 1000; |
16 | 16 | ||
17 | function sleep(ms) { | 17 | function sleep(ms) { |
18 | new Promise((resolve) => { | 18 | new Promise((resolve) => { |
19 | setTimeout(() => { | 19 | setTimeout(() => { |
20 | resolve(null); | 20 | resolve(null); |
21 | }, ms) | 21 | }, ms) |
22 | }); | 22 | }); |
23 | }; | 23 | }; |
24 | 24 | ||
25 | function createHttpServer() { | 25 | function createHttpServer() { |
26 | let listenPort = config.center_port; | 26 | let listenPort = config.center_port; |
27 | 27 | ||
28 | http.createServer(onRequestFromPartner).listen(listenPort, function() { | 28 | http.createServer(onRequestFromPartner).listen(listenPort, function() { |
29 | logger.info('Center HTTP server listen on port ' + listenPort); | 29 | logger.info('Center HTTP server listen on port ' + listenPort); |
30 | });; | 30 | });; |
31 | } | 31 | } |
32 | 32 | ||
33 | function onRequestFromPartner(req, res) { | 33 | function onRequestFromPartner(req, res) { |
34 | const method_name = 'onRequestFromPartner'; | 34 | const method_name = 'onRequestFromPartner'; |
35 | 35 | ||
36 | let remote_address = req.connection.remoteAddress.replace(/^::ffff:/, ''); | 36 | let remote_address = req.connection.remoteAddress.replace(/^::ffff:/, ''); |
37 | 37 | ||
38 | let qs = url.parse(req.url, true).query; | 38 | let qs = url.parse(req.url, true).query; |
39 | 39 | ||
40 | logger.verbose('Got a request from partner', {module_name: module_name, method_name: method_name, remote_address: remote_address, url: req.url, qs: qs}); | 40 | logger.verbose('Got a request from partner', {module_name: module_name, method_name: method_name, remote_address: remote_address, url: req.url, qs: qs}); |
41 | 41 | ||
42 | let partner = qs.terminal_name + '@' + remote_address; | 42 | let partner = qs.terminal_name + '@' + remote_address; |
43 | let password = qs.password; | 43 | let password = qs.password; |
44 | let reverse_url = qs.reverse_url; | 44 | let reverse_url = qs.reverse_url; |
45 | 45 | ||
46 | let product_name = qs.product_name; | 46 | let product_name = qs.product_name; |
47 | let destination = qs.destination; | 47 | let destination = qs.destination; |
48 | let request_id = qs.request_id; | 48 | let request_id = qs.request_id; |
49 | 49 | ||
50 | if (!qs.terminal_name || !password || !reverse_url || ! product_name || !destination || !request_id) { | 50 | if (!qs.terminal_name || !password || !reverse_url || ! product_name || !destination || !request_id) { |
51 | res.end('INVALID REQUEST'); | 51 | res.end('INVALID REQUEST'); |
52 | return; | 52 | return; |
53 | } | 53 | } |
54 | 54 | ||
55 | let msg = [ product_name, destination, password, request_id ].join('.'); | 55 | let msg = [ product_name, destination, password, request_id ].join('.'); |
56 | 56 | ||
57 | _callback.onIncomingMessage( | 57 | _callback.onIncomingMessage( |
58 | { | 58 | { |
59 | me: config.username, | 59 | me: config.username, |
60 | partner: partner, | 60 | partner: partner, |
61 | msg: msg.trim(), | 61 | msg: msg.trim(), |
62 | reverse_url: reverse_url | 62 | reverse_url: reverse_url |
63 | }, | 63 | }, |
64 | 64 | ||
65 | function(err, _result) { | 65 | function(err, _result) { |
66 | let result = cleanResponseToPartner(_result); | 66 | let result = cleanResponseToPartner(_result); |
67 | 67 | ||
68 | logger.verbose('Forwarding CORE response to partner as direct response', _result); | 68 | logger.verbose('Forwarding CORE response to partner as direct response', _result); |
69 | res.end(JSON.stringify(result)); | 69 | res.end(JSON.stringify(result)); |
70 | } | 70 | } |
71 | ) | 71 | ) |
72 | } | 72 | } |
73 | 73 | ||
74 | function cleanResponseToPartner(_data) { | 74 | function cleanResponseToPartner(_data) { |
75 | let data = JSON.parse(JSON.stringify(_data)); | 75 | let data = JSON.parse(JSON.stringify(_data)); |
76 | 76 | ||
77 | delete data.origin; | 77 | delete data.origin; |
78 | delete data.origin_report_ip; | 78 | delete data.origin_report_ip; |
79 | delete data.origin_report_port; | 79 | delete data.origin_report_port; |
80 | delete data.reverse_url; | 80 | delete data.reverse_url; |
81 | delete data.misc; | 81 | delete data.misc; |
82 | delete data.inquiry_only; | 82 | delete data.inquiry_only; |
83 | 83 | ||
84 | for (let key in data) { | 84 | for (let key in data) { |
85 | 85 | ||
86 | if (data.hasOwnProperty(key)) { | 86 | if (data.hasOwnProperty(key)) { |
87 | 87 | ||
88 | if (key.indexOf('[') >= 0) { delete data[key]; } | 88 | if (key.indexOf('[') >= 0) { delete data[key]; } |
89 | 89 | ||
90 | } | 90 | } |
91 | } | 91 | } |
92 | 92 | ||
93 | return data; | 93 | return data; |
94 | } | 94 | } |
95 | 95 | ||
96 | function init(cb) { | 96 | function init(cb) { |
97 | if (!cb) { | 97 | if (!cb) { |
98 | logger.warn('Callback is not defined'); | 98 | logger.warn('Callback is not defined'); |
99 | console.trace(); | 99 | console.trace(); |
100 | process.exit(1); | 100 | process.exit(1); |
101 | return; | 101 | return; |
102 | } | 102 | } |
103 | 103 | ||
104 | _callback = cb; | 104 | _callback = cb; |
105 | 105 | ||
106 | createHttpServer(); | 106 | createHttpServer(); |
107 | } | 107 | } |
108 | 108 | ||
109 | async function sleepAndResend(partner, msg, params, retry) { | 109 | async function sleepAndResend(partner, msg, params, retry) { |
110 | if ((retry || 0) > maxSendRetry) { | 110 | if (retry > maxSendRetry) { |
111 | logger.verbose('Retry exceeded', { | 111 | logger.verbose('Retry exceeded', { |
112 | params, | 112 | params, |
113 | retry: retry || 0, | 113 | retry: retry || 0, |
114 | }); | 114 | }); |
115 | return; | 115 | return; |
116 | } | 116 | } |
117 | 117 | ||
118 | await sleep(sleepBeforeRetryMs); | 118 | await sleep(sleepBeforeRetryMs); |
119 | send(partner, msg, params, retry + 1); | 119 | send(partner, msg, params, retry + 1); |
120 | } | 120 | } |
121 | 121 | ||
122 | function send(partner, msg, params, retry) { | 122 | function send(partner, msg, params, retry) { |
123 | logger.verbose('Got response from CORE', { | 123 | if (retry) { |
124 | partner: partner, msg: msg, params: params, retry: retry || 0, | 124 | logger.verbose('F39C9082: Resending', { |
125 | }); | 125 | partner, |
126 | msg, | ||
127 | params, | ||
128 | retry, | ||
129 | }) | ||
130 | } else { | ||
131 | logger.verbose('Got response from CORE', { | ||
132 | partner: partner, msg: msg, params: params, retry: retry || 0, | ||
133 | }); | ||
134 | } | ||
126 | 135 | ||
127 | if (!params || !params.reverse_url) { | 136 | if (!params || !params.reverse_url) { |
128 | logger.verbose('Undefined reverse_url, not forwarding message to partner'); | 137 | logger.verbose('Undefined reverse_url, not forwarding message to partner'); |
129 | return; | 138 | return; |
130 | } | 139 | } |
131 | 140 | ||
132 | if (params.reverse_url.indexOf('http') < 0) { | 141 | if (params.reverse_url.indexOf('http') < 0) { |
133 | logger.verbose('Invalid reverse_url, not forwarding message to partner'); | 142 | logger.verbose('Invalid reverse_url, not forwarding message to partner'); |
134 | return; | 143 | return; |
135 | } | 144 | } |
136 | 145 | ||
137 | if (params.rc === '68') { | 146 | if (params.rc === '68') { |
138 | logger.verbose('Ignoring RC 68 reverse report'); | 147 | logger.verbose('Ignoring RC 68 reverse report'); |
139 | return; | 148 | return; |
140 | } | 149 | } |
141 | 150 | ||
142 | let reqOptions = { | 151 | let reqOptions = { |
143 | url: params.reverse_url, | 152 | url: params.reverse_url, |
144 | qs: cleanResponseToPartner(params) | 153 | qs: cleanResponseToPartner(params) |
145 | } | 154 | } |
146 | 155 | ||
147 | logger.verbose('Sending reverse report to partner', {request: reqOptions}); | 156 | logger.verbose('Sending reverse report to partner', {request: reqOptions}); |
148 | request(reqOptions, function(err, res, body) { | 157 | request(reqOptions, function(err, res, body) { |
149 | if (err) { | 158 | if (err) { |
150 | logger.warn('Error sending reverse report to partner', {request: reqOptions, err: err}); | 159 | logger.warn('Error sending reverse report to partner', {request: reqOptions, err: err}); |
151 | sleepAndResend(partner, msg, params, retry); | 160 | sleepAndResend(partner, msg, params, retry || 0); |
152 | return; | 161 | return; |
153 | } | 162 | } |
154 | 163 | ||
155 | /* | 164 | /* |
156 | if (res.statusCode != 200) { | 165 | if (res.statusCode != 200) { |
157 | logger.warn('Partner not returning HTTP status code 200 on reverse report', { | 166 | logger.warn('Partner not returning HTTP status code 200 on reverse report', { |
158 | request: reqOptions, http_status: res.statusCode, | 167 | request: reqOptions, http_status: res.statusCode, |
159 | }); | 168 | }); |
160 | 169 | ||
161 | _sleepAndResend(partner, msg, params, retry); | 170 | _sleepAndResend(partner, msg, params, retry); |
162 | return; | 171 | return; |
163 | } | 172 | } |
164 | */ | 173 | */ |
165 | 174 | ||
166 | logger.verbose('Reverse report has been sent to partner', { request: reqOptions, httpStatus: res && res.statusCode }); | 175 | logger.verbose('Reverse report has been sent to partner', { request: reqOptions, httpStatus: res && res.statusCode }); |
167 | }) | 176 | }) |
168 | } | 177 | } |
169 | 178 | ||
170 | exports.init = init; | 179 | exports.init = init; |
171 | exports.send = send; | 180 | exports.send = send; |
172 | 181 |