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;