From 03f73469d9d7d21b16664e680138449d2f9bc98c Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Wed, 31 Jul 2019 18:17:10 +0700
Subject: [PATCH] Partner last seen by IMSI

---
 lib/apiserver/index.js |  2 +-
 lib/transport.js       | 32 ++++++++++++++++++--------------
 2 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/lib/apiserver/index.js b/lib/apiserver/index.js
index 6a2d9b5..d35e14a 100644
--- a/lib/apiserver/index.js
+++ b/lib/apiserver/index.js
@@ -39,7 +39,7 @@ function onIncomingSms(req, res) {
 
     const numberWithSuffix = req.query.number.replace(/^\+/, '') + (config.number_suffix || '');
 
-    partnerLastSeen.set(req.query.number, req.query.modem);
+    partnerLastSeen.set(req.query.number, req.query.modem_imsi);
 
     history.push({
         ts: req.query.ts || moment().format('YYYY-MM-DD HH:mm:ss'),
diff --git a/lib/transport.js b/lib/transport.js
index 6f3b271..d5bb638 100644
--- a/lib/transport.js
+++ b/lib/transport.js
@@ -13,23 +13,25 @@ const modems = require('./modems2');
 const partnerLastSeen = require('./partner-last-seen');
 const history = require('./history');
 
-function _send(destinationNumber, msg, handlerName) {
+function _send(destinationNumber, msg, handlerIMSI) {
 
     if (msg.length > 160) {
+        logger.info('Splitting message');
+
         const newMsg = msg.slice(0, 160);
         const remainingMsg = msg.slice(160);
 
-        _send(destinationNumber, newMsg, handlerName);
+        _send(destinationNumber, newMsg, handlerIMSI);
         setTimeout(() => {
-            _send(destinationNumber, remainingMsg, handlerName);
-        }, 2000);
+            _send(destinationNumber, remainingMsg, handlerIMSI);
+        }, 1000);
 
         return;
     }
 
-    const modem = modems.get('name', handlerName);
+    const modem = modems.get('imsi', handlerIMSI);
     if (!modem) {
-        logger.warn('Not knowing modem to use. Ignoring message', { destination_number: destinationNumber, msg: msg, handler_name: handlerName });
+        logger.warn('Not knowing modem to use. Ignoring message', { destination_number: destinationNumber, msg: msg, modem_imsi: handlerIMSI });
         return;
     }
 
@@ -43,7 +45,9 @@ function _send(destinationNumber, msg, handlerName) {
     history.push({
         ts: moment().format('YYYY-MM-DD HH:mm:ss'), 
         modem: {
-            name: handlerName,
+            name: modem.name,
+            imsi: modem.imsi,
+            msisdn: modem.msisdn,
         },
         direction: 'OUTGOING',
         partner: destinationNumber,
@@ -65,17 +69,17 @@ function _send(destinationNumber, msg, handlerName) {
         }
     }
 
-    logger.info('Sending message to modem handler', { req_id: reqId, destination_number: destinationNumber, msg: msg, msg_length: msg.length, handler_name: handlerName });
+    logger.info('Sending message to modem handler', { req_id: reqId, destination_number: destinationNumber, msg: msg, msg_length: msg.length, modem_name: modem.name, modem_imsi: modem.imsi });
     request(requestOptions, function(err, res, body) {
         if (err) {
-            logger.warn('Error requesting to modem handler. ' + err.toString(), { req_id: reqId, handler_name: handlerName });
+            logger.warn('Error requesting to modem handler. ' + err.toString(), { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi });
             
         }
         else if (res.statusCode != 200) {
-            logger.warn('Modem handler not responding with HTTP status code 200.', { http_status_code: res.statusCode, req_id: reqId, handler_name: handlerName });
+            logger.warn('Modem handler not responding with HTTP status code 200.', { http_status_code: res.statusCode, req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi });
         }
         else {
-            logger.verbose('Message sent to handler', { req_id: reqId, handler_name: handlerName, response_body: body });
+            logger.verbose('Message sent to handler', { req_id: reqId, modem_name: modem.name, modem_imsi: modem.imsi, response_body: body });
         }
     })
 
@@ -95,14 +99,14 @@ async function send(partner, msg) {
     const destinationNumber = modemSelect.removeSuffixFromNumber(partner, config);
 
     // logger.verbose('Choosing handler name', { partner, destinationNumber, msg, origin });
-    let handlerName = await partnerLastSeen.get(destinationNumber) ;
+    const handlerIMSI = await partnerLastSeen.get(destinationNumber) ;
 
-    if (!handlerName) {
+    if (!handlerIMSI) {
         logger.warn(`Unknown handler for sending message to partner`, { partner, destinationNumber });
         return;
     }
 
-    _send(destinationNumber, msg, handlerName);
+    _send(destinationNumber, msg, handlerIMSI);
 }
 
 exports.send = send;
\ No newline at end of file
-- 
1.9.0