Added support for sending long messages via splitted short_message parameter
This commit is contained in:
+69
-19
@@ -1,9 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
var log = require('winston'),
|
||||
events = require('events'),
|
||||
smppUtils = require('./utils'),
|
||||
defs = require('./defs');
|
||||
var log = require('winston'),
|
||||
events = require('events'),
|
||||
utils = require('./utils'),
|
||||
defs = require('./defs');
|
||||
|
||||
/**
|
||||
* Generic session function
|
||||
@@ -57,7 +57,7 @@ function session(sock) {
|
||||
*/
|
||||
returnObj.sockWrite = function(pdu, closeAfterSend) {
|
||||
if ( ! Buffer.isBuffer(pdu)) {
|
||||
smppUtils.objToPdu(pdu, function(err, buffer) {
|
||||
utils.objToPdu(pdu, function(err, buffer) {
|
||||
if (err) {
|
||||
log.warn('larvitsmpp: lib/session.js: session() - sockWrite() - Could not convert PDU to buffer');
|
||||
returnObj.closeSocket();
|
||||
@@ -96,7 +96,7 @@ function session(sock) {
|
||||
|
||||
// Make sure the pdu is an object
|
||||
if (Buffer.isBuffer(pdu)) {
|
||||
smppUtils.pduToObj(pdu, function(err, pduObj) {
|
||||
utils.pduToObj(pdu, function(err, pduObj) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
return;
|
||||
@@ -180,7 +180,7 @@ function session(sock) {
|
||||
closeAfterSend = undefined;
|
||||
}
|
||||
|
||||
smppUtils.pduReturn(pdu, status, params, function(err, retPdu) {
|
||||
utils.pduReturn(pdu, status, params, function(err, retPdu) {
|
||||
if (err) {
|
||||
log.error('larvitsmpp: lib/session.js: session() - returnObj.sendReturn() - Could not create return PDU: ' + err.message);
|
||||
returnObj.closeSocket();
|
||||
@@ -200,6 +200,53 @@ function session(sock) {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Send a longer SMS than 1120 bits
|
||||
*
|
||||
* @param obj smsOptions
|
||||
* from - alphanum or international format
|
||||
* to - international format
|
||||
* message - string
|
||||
* dlr - boolean defaults to false
|
||||
* @param func callback(err, smsId, retPduObj)
|
||||
*/
|
||||
returnObj.sendLongSms = function(smsOptions, callback) {
|
||||
var msgs = utils.splitMsg(smsOptions.message),
|
||||
encoding = defs.encodings.detect(smsOptions.message); // Set encoding once for all message parts
|
||||
|
||||
function sendPart(i) {
|
||||
var pduObj = {
|
||||
'cmdName': 'submit_sm',
|
||||
'params': {
|
||||
'source_addr_ton': 1, // Default to international format
|
||||
'esm_class': 0x40, // This indicates that there is a UDH in the short_message
|
||||
'source_addr': smsOptions.from,
|
||||
'destination_addr': smsOptions.to,
|
||||
'data_coding': defs.consts.ENCODING[encoding],
|
||||
'short_message': msgs[i],
|
||||
'sm_length': msgs[i].length
|
||||
}
|
||||
};
|
||||
|
||||
// Request DLRs!
|
||||
if (smsOptions.dlr) {
|
||||
pduObj.params.registered_delivery = 0x01;
|
||||
}
|
||||
|
||||
log.debug('larvitsmpp: lib/session.js: returnObj.sendLongSms() - pduObj: ' + JSON.stringify(pduObj));
|
||||
|
||||
returnObj.send(pduObj, function(err, retPduObj) {
|
||||
if (typeof callback === 'function' && msgs[i + 1] === undefined) {
|
||||
callback(err, retPduObj.params.message_id, retPduObj);
|
||||
} else if (msgs[i + 1] !== undefined) {
|
||||
sendPart(i + 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
sendPart(0);
|
||||
};
|
||||
|
||||
/**
|
||||
* Send an SMS
|
||||
*
|
||||
@@ -215,6 +262,7 @@ function session(sock) {
|
||||
|
||||
pduObj.cmdName = 'submit_sm';
|
||||
pduObj.params = {
|
||||
'source_addr_ton': 1, // Default to international format
|
||||
'source_addr': smsOptions.from,
|
||||
'destination_addr': smsOptions.to,
|
||||
'short_message': smsOptions.message
|
||||
@@ -225,6 +273,13 @@ function session(sock) {
|
||||
pduObj.params.registered_delivery = 0x01;
|
||||
}
|
||||
|
||||
// Check if we must split this message into multiple
|
||||
if (utils.bitCount(smsOptions.message) > 1120) {
|
||||
returnObj.sendLongSms(smsOptions, callback);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
log.debug('larvitsmpp: lib/session.js: returnObj.sendSms() - pduObj: ' + JSON.stringify(pduObj));
|
||||
|
||||
returnObj.send(pduObj, function(err, retPduObj) {
|
||||
@@ -243,7 +298,6 @@ function session(sock) {
|
||||
*/
|
||||
returnObj.sendDlr = function(sms, status, callback) {
|
||||
var shortMessage = 'id:' + sms.smsId + ' sub:001 ',
|
||||
err,
|
||||
dlrPduObj;
|
||||
|
||||
if (typeof status === 'function') {
|
||||
@@ -261,8 +315,8 @@ function session(sock) {
|
||||
shortMessage += 'dlvrd:0 ';
|
||||
}
|
||||
|
||||
shortMessage += 'submit date:' + smppUtils.smppDate(sms.submitTime);
|
||||
shortMessage += ' done date:' + smppUtils.smppDate(new Date());
|
||||
shortMessage += 'submit date:' + utils.smppDate(sms.submitTime);
|
||||
shortMessage += ' done date:' + utils.smppDate(new Date());
|
||||
|
||||
if (status) {
|
||||
shortMessage += ' stat:DELIVRD err:0 text:xxx';
|
||||
@@ -298,15 +352,12 @@ function session(sock) {
|
||||
|
||||
dlrPduObj.seqNr = 323;
|
||||
|
||||
console.log('before:');
|
||||
console.log(dlrPduObj);
|
||||
|
||||
smppUtils.objToPdu(dlrPduObj, function(err, pdu) {
|
||||
utils.objToPdu(dlrPduObj, function(err, pdu) {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
smppUtils.pduToObj(pdu, function(err, newObj) {
|
||||
utils.pduToObj(pdu, function(err, newObj) {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
@@ -316,14 +367,13 @@ function session(sock) {
|
||||
});
|
||||
});
|
||||
|
||||
return;
|
||||
returnObj.send(dlrPduObj, function(err, retPduObj) {
|
||||
console.log('WHATTA WHATTA');
|
||||
console.log(retPduObj);
|
||||
|
||||
/*if (typeof callback === 'function') {
|
||||
if (typeof callback === 'function') {
|
||||
callback(err, retPduObj.params.message_id, retPduObj);
|
||||
}*/
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -423,7 +473,7 @@ function session(sock) {
|
||||
|
||||
log.silly('larvitsmpp: lib/session.js: session() - sock.on(data) - Incoming PDU: ' + pduBuf.toString('hex'));
|
||||
|
||||
smppUtils.pduToObj(pduBuf, function(err, pduObj) {
|
||||
utils.pduToObj(pduBuf, function(err, pduObj) {
|
||||
if (err) {
|
||||
log.warn('larvitsmpp: lib/session.js: session() - Invalid PDU. ' + err.message);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user