diff --git a/package.json b/package.json
index 86151e4..febe5e3 100644
--- a/package.json
+++ b/package.json
@@ -27,6 +27,7 @@
     "sate24": "git+http://git@gitlab.kodesumber.com/reload97/node-sate24.git",
     "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git",
     "xmlrpc": "~1.3.1",
-    "winston": "~2.1.1"
+    "winston": "~2.1.1",
+    "xml2js": "~0.4.15"
   }
 }
diff --git a/vre.js b/vre.js
index 9112e73..dd68dd5 100644
--- a/vre.js
+++ b/vre.js
@@ -1,4 +1,5 @@
 var xmlrpc = require('xmlrpc');
+var xmlParser = require("xml2js").parseString;
 
 var config;
 var callbackReport;
@@ -26,4 +27,47 @@ function start(_config, _callbackReport, options) {
     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;