More support for return PDUs params and tlvs and more tests

This commit is contained in:
2015-05-01 14:28:30 +02:00
parent 04972855ed
commit 3c9d04aacc
5 changed files with 91 additions and 18 deletions
+1 -1
View File
@@ -67,7 +67,7 @@ function clientSession(sock, options) {
} else if (pduObj.cmdName === 'submit_sm') { } else if (pduObj.cmdName === 'submit_sm') {
returnObj.submitSm(pduObj); returnObj.submitSm(pduObj);
} else if (pduObj.cmdName === 'unbind') { } else if (pduObj.cmdName === 'unbind') {
returnObj.sendReturn(pduObj, 'ESME_ROK', true); returnObj.sendReturn(pduObj, 'ESME_ROK', undefined, true);
} else { } else {
// All other commands we do not support // All other commands we do not support
returnObj.sendReturn(pduObj, 'ESME_RINVCMDID'); returnObj.sendReturn(pduObj, 'ESME_RINVCMDID');
+1 -1
View File
@@ -95,7 +95,7 @@ function serverSession(sock, options) {
returnObj.on('incomingPdu', function(pduObj) { returnObj.on('incomingPdu', function(pduObj) {
if (pduObj.cmdName === 'unbind') { if (pduObj.cmdName === 'unbind') {
returnObj.sendReturn(pduObj, 'ESME_ROK', true); returnObj.sendReturn(pduObj, 'ESME_ROK', undefined, true);
} else if (returnObj.loggedIn === false) { } else if (returnObj.loggedIn === false) {
log.debug('larvitsmpp: lib/server.js: serverSession() - returnObj.handleIncomingPdu() - Not logged in, running login function'); log.debug('larvitsmpp: lib/server.js: serverSession() - returnObj.handleIncomingPdu() - Not logged in, running login function');
returnObj.login(pduObj); returnObj.login(pduObj);
+16 -4
View File
@@ -160,16 +160,23 @@ function session(sock) {
* *
* @param obj or buf pdu * @param obj or buf pdu
* @param str status - see list at defs.errors - defaults to 'ESME_ROK' - no error (OPTIONAL) * @param str status - see list at defs.errors - defaults to 'ESME_ROK' - no error (OPTIONAL)
* @param obj params (OPTIONAL)
* @param bol closeAfterSend - if true will close the socket after sending (OPTIONAL) * @param bol closeAfterSend - if true will close the socket after sending (OPTIONAL)
* @param func callback(err) (OPTIONAL) * @param func callback(err, retPdu) (OPTIONAL)
*/ */
returnObj.sendReturn = function(pdu, status, closeAfterSend, callback) { returnObj.sendReturn = function(pdu, status, params, closeAfterSend, callback) {
if (typeof params === 'function') {
callback = params;
params = undefined;
closeAfterSend = undefined;
}
if (typeof closeAfterSend === 'function') { if (typeof closeAfterSend === 'function') {
callback = closeAfterSend; callback = closeAfterSend;
closeAfterSend = undefined; closeAfterSend = undefined;
} }
smppUtils.pduReturn(pdu, status, function(err, retPdu) { smppUtils.pduReturn(pdu, status, params, function(err, retPdu) {
if (err) { if (err) {
log.error('larvitsmpp: lib/session.js: session() - returnObj.sendReturn() - Could not create return PDU: ' + err.message); log.error('larvitsmpp: lib/session.js: session() - returnObj.sendReturn() - Could not create return PDU: ' + err.message);
returnObj.closeSocket(); returnObj.closeSocket();
@@ -184,7 +191,7 @@ function session(sock) {
returnObj.sockWrite(retPdu, closeAfterSend); returnObj.sockWrite(retPdu, closeAfterSend);
if (typeof callback === 'function') { if (typeof callback === 'function') {
callback(); callback(null, retPdu);
} }
}); });
}; };
@@ -215,6 +222,11 @@ function session(sock) {
} }
returnObj.send(pduObj, function(err, retPduObj) { returnObj.send(pduObj, function(err, retPduObj) {
console.log('RAAAV');
console.log(retPduObj);
if (typeof callback === 'function') { if (typeof callback === 'function') {
callback(err, retPduObj.params.message_id, retPduObj); callback(err, retPduObj.params.message_id, retPduObj);
} }
+27 -10
View File
@@ -323,10 +323,11 @@ function objToPdu(obj, callback) {
* *
* @param obj or buf pdu * @param obj or buf pdu
* @param str status - see list at defs.errors - defaults to 'ESME_ROK' - no error (OPTIONAL) * @param str status - see list at defs.errors - defaults to 'ESME_ROK' - no error (OPTIONAL)
* @param obj params (OPTIONAL)
* @param obj tlvs (OPTIONAL) * @param obj tlvs (OPTIONAL)
* @param func callback(err, pduBuffer) (OPTIONAL) * @param func callback(err, pduBuffer) (OPTIONAL)
*/ */
function pduReturn(pdu, status, tlvs, callback) { function pduReturn(pdu, status, params, tlvs, callback) {
var err = null, var err = null,
retPdu = {}, retPdu = {},
param; param;
@@ -340,23 +341,28 @@ function pduReturn(pdu, status, tlvs, callback) {
return; return;
} }
pduReturn(pduObj, status, callback); pduReturn(pduObj, status, params, tlvs, callback);
}); });
return; return;
} }
log.silly('larvitsmpp: lib/utils.js: pduReturn() - ran'); log.silly('larvitsmpp: lib/utils.js: pduReturn() - ran');
// If status is a function, it is the callback. if (typeof tlvs === 'function') {
// Default to OK status and sett callback correctly callback = tlvs;
if (typeof status === 'function') {
callback = status;
status = 'ESME_ROK';
tlvs = undefined; tlvs = undefined;
} }
if (typeof tlvs === 'function') { if (typeof params === 'function') {
callback = tlvs; callback = params;
params = {};
tlvs = undefined;
}
if (typeof status === 'function') {
callback = status;
status = 'ESME_ROK';
params = {};
tlvs = undefined; tlvs = undefined;
} }
@@ -364,6 +370,13 @@ function pduReturn(pdu, status, tlvs, callback) {
status = 'ESME_ROK'; status = 'ESME_ROK';
} }
if (callback === undefined) {
callback = function() {};
}
if (params === undefined) {
params = {};
}
if (pdu === undefined || pdu.cmdName === undefined || pdu.seqNr === undefined) { if (pdu === undefined || pdu.cmdName === undefined || pdu.seqNr === undefined) {
err = new Error('larvitsmpp: lib/utils.js: pduReturn() - Invalid call PDU, cannot create response PDU'); err = new Error('larvitsmpp: lib/utils.js: pduReturn() - Invalid call PDU, cannot create response PDU');
@@ -386,13 +399,17 @@ function pduReturn(pdu, status, tlvs, callback) {
retPdu.cmdName = pdu.cmdName + '_resp'; retPdu.cmdName = pdu.cmdName + '_resp';
retPdu.cmdStatus = status; retPdu.cmdStatus = status;
retPdu.seqNr = pdu.seqNr; retPdu.seqNr = pdu.seqNr;
retPdu.params = {}; retPdu.params = params;
retPdu.tlvs = tlvs; retPdu.tlvs = tlvs;
// Populate parameters that should exist in the response // Populate parameters that should exist in the response
for (param in defs.cmds[pdu.cmdName + '_resp'].params) { for (param in defs.cmds[pdu.cmdName + '_resp'].params) {
// Do not override the manually supplied parameters
if (retPdu.params[param] === undefined) {
retPdu.params[param] = pdu.params[param]; retPdu.params[param] = pdu.params[param];
} }
}
objToPdu(retPdu, function(err, retPdu) { objToPdu(retPdu, function(err, retPdu) {
callback(err, retPdu); callback(err, retPdu);
+44
View File
@@ -200,8 +200,52 @@ describe('PDU convertion', function() {
done(); done();
}); });
}); });
});
});
describe('Return PDUs', function() {
it('should create a basic and valid return PDU', function(done) {
var pduObj = {
'cmdName': 'deliver_sm',
'seqNr': 393,
'cmdStatus': 'ESME_ROK',
'params': {
'source_addr': '46701113311',
'destination_addr': '46709771337',
'esm_class': 4,
'short_message': 'random stuff',
'message_id': 'od9s2'
},
'tlvs': {
'receipted_message_id': {
'tagId': 0x001E,
'tagName': 'receipted_message_id',
'tagValue': '293f293'
},
'5142': {
'tagId': 5142,
'tagName': 'Nils',
'tagValue': new Buffer('blajfoo', 'ascii')
}
}
};
larvitsmpp.utils.pduReturn(pduObj, function(err, pduBuffer) {
assert( ! err, 'Error should be negative');
larvitsmpp.utils.pduToObj(pduBuffer, function(err, retPduObj) {
assert( ! err, 'Error should be negative');
assert(retPduObj.cmdName === 'deliver_sm_resp', 'Command name should be "deliver_sm_resp"');
assert(retPduObj.cmdStatus === 'ESME_ROK', 'Command status should be ESME_ROK');
assert(retPduObj.params.message_id === 'od9s2', 'message_id should be correct');
done();
});
}); });
}); });
}); });
});