From 77d71adf18e17aaa6b2d4d8983be1b36e04727f4 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <gua@adhisimon.org>
Date: Mon, 9 May 2016 21:28:12 +0700
Subject: [PATCH] 68

---
 partner-irs.js | 57 +++++++++++++++++++++++++++++++++------------------------
 1 file changed, 33 insertions(+), 24 deletions(-)

diff --git a/partner-irs.js b/partner-irs.js
index 677d847..2362a28 100644
--- a/partner-irs.js
+++ b/partner-irs.js
@@ -33,34 +33,43 @@ function start(_config, _callbackReport, options) {
         });
     }
     
-    createHttpReportServer();
+    createXMLRPCServer();
 }
 
-function createHttpReportServer() {
-    var httpServer = http.createServer(function(request, response) {
-        var qs = url.parse(request.url, true).query;
-        var path = url.parse(request.url).pathname;
-        
-        logger.info('Got reverse report from partner', {path: path, qs: qs});
-        response.end('OK');
+function createXMLRPCServer() {
+
+    logger.info('Creating XML-RPC server on port ' + config.h2h_out.listen_port);
+    var serverOptions = {
+        port: config.h2h_out.listen_port
+    };
+
+    var server = xmlrpc.createServer(serverOptions);
+
+    server.on('NotFound', function (method, params) {
+        logger.warn('Unknown method recevied on XMLRPC server', {xmlrpc_method: method, xmlrpc_params: params});
+    });
+
+    server.on('topUpReport', function (err, params, callback) {
+    
+        logger.info('Got XMLRPC topUpReport request from partner', {xmlrpc_method: 'topUpReport', xmlrpc_params: params});
         
-        var  trxid;
-        try {
-            trxid = qs.transid;
-        }
-        catch(err) {
-        }
+        var paramscount = params.length;
+        for (var i = 0; i < paramscount; i++) {
+            var value = params[i];
+            
+            if (value['RESPONSECODE'] == '00' && config.h2h_out.parse_sn == 'YES') {
+                value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE'];
+            }
+            
+            if (value['RESPONSECODE'] != '00' && value['RESPONSECODE'] != '68') {
+                value['RESPONSECODE'] = '40';
+            }
         
-        if (trxid) {
-            logger.info('Requesting advice from webreport', {trxid: trxid})
-            cekstatus.advice({trxid: trxid}, callbackFromWebReport);
+            callbackReport(value['REQUESTID'], value['RESPONSECODE'], value['MESSAGE']);
         }
-        
-    });
-    
-    httpServer.listen(config.h2h_out.listen_port, function() {
-        logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
-    });
+
+        callback(null, 'ACK REPORT OK');
+    })
 }
 
 function topupRequestHttpGet(task, retry) {
@@ -135,7 +144,7 @@ function topupRequestXMLRPC(task, retry) {
             value['MESSAGE'] = 'SN=' + parseSN(value['MESSAGE']) + '; ' + value['MESSAGE'];
         }
         
-        if (value['RESPONSECODE'] != '00') {
+        if (value['RESPONSECODE'] != '00' && value['RESPONSECODE'] != '68') {
             value['RESPONSECODE'] = '40';
         }
         
-- 
1.9.0