vre.js
1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
var xmlrpc = require('xmlrpc');
var xmlParser = require("xml2js").parseString;
var config;
var callbackReport;
var aaa;
var logger;
function start(_config, _callbackReport, options) {
config = _config;
callbackReport = _callbackReport;
if (options && options.aaa) {
aaa = options.aaa;
}
if (options && options.logger) {
logger = options.logger;
} else {
logger = new winston.Logger({
transports: [
new (winston.transports.Console)()
]
});
}
createServer();
}
function createServer() {
var httpServer = http.createServer(onReverseReport).listen(config.h2h_out.listen_port, function() {
logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
});
}
function onReverseReport(http_request, http_response) {
xmlParser(http_request, function(err, data) {
if (err) {
logger.warn('Can not parse XML request', {http_request: http_request});
http_response('Something wrong');
return;
}
var message;
var trx_id;
try {
message = data.reporth2h.msg.join().trim();
trx_id = data.reporth2h.msg.join().trim();
}
catch(missingFieldError) {
logger.warn('Missing field on xml report', {http_request: http_request, error: missingFieldError});
http_response('Something wrong');
return;
}
var trx_status = '68';
if (message.indexOf('Sukses') >= 0) {
trx_status = '00';
}
else if (message.indexOf('Gagal') >= 0) {
trx_status = '40';
}
callbackReport(trx_id, trx_status, message);
});
}
exports.start = start;