Commit 4880db9f60df1a8c476e4cd30cdb38232713ac72

Authored by Adhidarma Hadiwinoto
1 parent 2ab4448899
Exists in master and in 1 other branch ad2mt

Ignore reverse report rc 68

Showing 1 changed file with 4 additions and 0 deletions Inline Diff

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