From 077f3b0aa21c030039f0ef39eac0749f88c8bc0d Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Wed, 24 Jul 2019 21:27:55 +0700
Subject: [PATCH] Support long sms (waiting for lock support on modem)

---
 lib/transport.js | 54 +++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 37 insertions(+), 17 deletions(-)

diff --git a/lib/transport.js b/lib/transport.js
index c6c9932..6c73b02 100644
--- a/lib/transport.js
+++ b/lib/transport.js
@@ -50,32 +50,30 @@ async function _getApproriateHandler(partnerNumber, origin) {
     return handlerToUse;
 }
 
-async function send(partner, msg, origin) {
-    if (!partner) return;
-
-    if (typeof msg !== 'string') {
-        logger.warn('Message to send is not a string, ignoring message');
-        return;
-    }
-
-    msg = msg.trim();
-    if (!msg) return;
-
-    const reqId = uuidv4();
+function _send(destinationNumber, msg, handlerName) {
 
+    /*
     if (msg.length > 160 && !config.do_not_trim_long_sms) {
         logger.verbose('Message trim to 160 chars');
         msg = msg.slice(0, 156) + ' ...';
     }
+    */
 
-    const destinationNumber = modems.removeSuffixFromNumber(partner, config);
+    if (msg.length > 160) {
+        const newMsg = msg.slice(0, 160);
+        const remainingMsg = msg.slice(160);
 
-    logger.verbose('Choosing handler name', { req_id: reqId, partner: partner, msg: msg, origin: origin });
-    let handlerName = ( await _getApproriateHandler(destinationNumber) );
+        _send(destinationNumber, newMsg, handlerName);
+        setTimeout(() => {
+            _send(destinationNumber, remainingMsg, handlerName);
+        }, 2000);
+
+        return;
+    }
 
     const modem = modems.getModemConfig(handlerName, config.modems);
     if (!modem) {
-        logger.warn('Not knowing modem to use. Ignoring message', { partner: partner, msg: msg, origin: origin, handler_name: handlerName });
+        logger.warn('Not knowing modem to use. Ignoring message', { destination_number: destinationNumber, msg: msg, handler_name: handlerName });
         return;
     }
 
@@ -84,6 +82,8 @@ async function send(partner, msg, origin) {
         return;
     }
 
+    const reqId = uuidv4();
+
     const requestOptions = {
         url: modem.url,
         qs: {
@@ -94,7 +94,7 @@ async function send(partner, msg, origin) {
         }
     }
 
-    logger.info('Sending message to modem handler', { req_id: reqId, partner: partner, 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, handler_name: handlerName });
     request(requestOptions, function(err, res, body) {
         if (err) {
             logger.warn('Error requesting to modem handler. ' + err.toString(), { req_id: reqId, handler_name: handlerName });
@@ -107,6 +107,26 @@ async function send(partner, msg, origin) {
             logger.verbose('Message sent to handler', { req_id: reqId, handler_name: handlerName, response_body: body });
         }
     })
+
+}
+
+async function send(partner, msg, origin) {
+    if (!partner) return;
+
+    if (typeof msg !== 'string') {
+        logger.warn('Message to send is not a string, ignoring message');
+        return;
+    }
+
+    msg = msg.trim();
+    if (!msg) return;
+
+    const destinationNumber = modems.removeSuffixFromNumber(partner, config);
+
+    logger.verbose('Choosing handler name', { partner: partner, msg: msg, origin: origin });
+    let handlerName = ( await _getApproriateHandler(destinationNumber) );
+
+    _send(destinationNumber, msg, handlerName);
 }
 
 exports.send = send;
\ No newline at end of file
-- 
1.9.0