vre.js 1.81 KB
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;