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