From 2307800d22b2632ed754461df34f42577ec94d9e Mon Sep 17 00:00:00 2001 From: lilleman Date: Sun, 10 May 2015 18:23:38 +0200 Subject: [PATCH] Some restructuring etc --- lib/client.js | 19 +++++++++--------- lib/server.js | 23 +++++++++++++++------- lib/session.js | 52 +++++++++++++++++++++++++++++++++----------------- 3 files changed, 60 insertions(+), 34 deletions(-) diff --git a/lib/client.js b/lib/client.js index 5abe11d..0147e45 100644 --- a/lib/client.js +++ b/lib/client.js @@ -59,17 +59,18 @@ function clientSession(sock, options) { returnObj.login(); returnObj.resetEnqLinkTimer(); + // Handle incoming Pdu Objects returnObj.on('incomingPduObj', function(pduObj) { - if (pduObj.cmdName === 'deliver_sm') { - returnObj.deliverSm(pduObj); - } else if (pduObj.cmdName === 'enquire_link') { - returnObj.enquireLink(); - } else if (pduObj.cmdName === 'submit_sm') { - returnObj.submitSm(pduObj); - } else if (pduObj.cmdName === 'unbind') { - returnObj.sendReturn(pduObj, 'ESME_ROK', undefined, true); + // Call the appropriate handleCmd function + + if (typeof returnObj.handleCmd[pduObj.cmdName] === 'function') { + log.debug('larvitsmpp: lib/client.js: clientSession() - returnObj.on(incomingPduObj) - Running cmd handling function returnObj.handleCmd.' + pduObj.cmdName + '()'); + + returnObj.handleCmd[pduObj.cmdName](pduObj); } else { - // All other commands we do not support + // No command handling function is registered, return error "invalid command" + log.info('larvitsmpp: lib/client.js: clientSession() - returnObj.on(incomingPduObj) - No handling function found for command: "' + pduObj.cmdName + '"'); + returnObj.sendReturn(pduObj, 'ESME_RINVCMDID'); } }); diff --git a/lib/server.js b/lib/server.js index 334ebde..d215fc8 100644 --- a/lib/server.js +++ b/lib/server.js @@ -93,20 +93,29 @@ function serverSession(sock, options) { returnObj.resetEnqLinkTimer(); + // Handle incoming Pdu Objects returnObj.on('incomingPduObj', function(pduObj) { + // Call the appropriate handleCmd function + + // Unbind is always ok if (pduObj.cmdName === 'unbind') { returnObj.sendReturn(pduObj, 'ESME_ROK', undefined, true); + + // If client is not logged in, always run the login function } else if (returnObj.loggedIn === false) { log.debug('larvitsmpp: lib/server.js: serverSession() - returnObj.handleIncomingPdu() - Not logged in, running login function'); returnObj.login(pduObj); - } else if (pduObj.cmdName === 'deliver_sm') { - returnObj.deliverSm(pduObj); - } else if (pduObj.cmdName === 'enquire_link') { - returnObj.enquireLink(pduObj); - } else if (pduObj.cmdName === 'submit_sm') { - returnObj.submitSm(pduObj); + + // Client is logged in, try to match a handling function + } else if (typeof returnObj.handleCmd[pduObj.cmdName] === 'function') { + log.debug('larvitsmpp: lib/server.js: serverSession() - returnObj.on(incomingPduObj) - Running cmd handling function returnObj.handleCmd.' + pduObj.cmdName + '()'); + + returnObj.handleCmd[pduObj.cmdName](pduObj); + + // No command handling function is registered, return error "invalid command" } else { - // All other commands we do not support + log.info('larvitsmpp: lib/server.js: serverSession() - returnObj.on(incomingPduObj) - No handling function found for command: "' + pduObj.cmdName + '"'); + returnObj.sendReturn(pduObj, 'ESME_RINVCMDID'); } }); diff --git a/lib/session.js b/lib/session.js index af55a4a..fbb012f 100644 --- a/lib/session.js +++ b/lib/session.js @@ -135,9 +135,6 @@ function session(sock) { log.debug('larvitsmpp: lib/session.js: session() - returnObj.send() - returnObj.on(incomingPduObj) - cmdName: ' + incPduObj.cmdName + ' seqNr: ' + incPduObj.seqNr + ' cmdStatus: ' + incPduObj.cmdStatus); - // Clean up by removing this listener or else it will lurk along forever - returnObj.removeAllListeners('incomingPdu' + pduObj.seqNr); - // Make sure this is the actual response to the sent PDU if (incPduObj.isResponse() && incPduObj.seqNr === pduObj.seqNr) { callback(null, incPduObj); @@ -377,8 +374,12 @@ function session(sock) { }); }; + // Handle incomming commands. + // This is intended to be extended + returnObj.handleCmd = {}; + // Handle incoming deliver_sm - returnObj.deliverSm = function(pduObj) { + returnObj.handleCmd.deliver_sm = function(pduObj) { var dlrObj; // TLV message_state must exists @@ -415,16 +416,23 @@ function session(sock) { returnObj.sendReturn(pduObj); }; + // Enquire link + returnObj.handleCmd.enquire_link = function(pduObj) { + log.silly('larvitsmpp: lib/session.js: session() - enquireLink() - Enquiring link'); + returnObj.resetEnqLinkTimer(); + returnObj.sendReturn(pduObj); + }; + // Handle incoming submit_sm - returnObj.submitSm = function(pduObj) { + returnObj.handleCmd.submit_sm = function(pduObj) { var smsObj = {}; smsObj = { - 'from': pduObj.params.source_addr, - 'to': pduObj.params.destination_addr, - 'submitTime': new Date(), - 'message': pduObj.params.short_message, - 'dlr': Boolean(pduObj.params.registered_delivery) + 'from': pduObj.params.source_addr, + 'to': pduObj.params.destination_addr, + 'submitTime': new Date(), + 'message': pduObj.params.short_message, + 'dlr': Boolean(pduObj.params.registered_delivery) }; function smsReceived(smsData) { @@ -440,6 +448,11 @@ function session(sock) { returnObj.emit('sms', smsObj, smsReceived); }; + // Handle incoming unbind + returnObj.handleCmd.unbind = function(pduObj) { + returnObj.sendReturn(pduObj, 'ESME_ROK', undefined, true); + }; + // Dummy, should be extended by serverSession or clientSession returnObj.login = function() { log.info('larvitsmpp: lib/session.js: session() - login() - Dummy login function ran, this might be a mistake'); @@ -451,12 +464,7 @@ function session(sock) { log.silly('larvitsmpp: lib/session.js: session() - resetEnqLinkTimer() - Resetting the kill timer'); }; - returnObj.enquireLink = function(pduObj) { - log.silly('larvitsmpp: lib/session.js: session() - enquireLink() - Enquiring link'); - returnObj.resetEnqLinkTimer(); - returnObj.sendReturn(pduObj); - }; - + // Unbind this session returnObj.unbind = function() { returnObj.send({ 'cmdName': 'unbind' @@ -502,15 +510,21 @@ function session(sock) { returnObj.emit('incomingPdu', pdu); } + if (returnObj.dataQueue.length === 0) { + log.silly('larvitsmpp: lib/session.js: session() - sock.on(data) - All queue hanlded, breaking while loop.'); + break; + } + // If the command length is larger than the queue, we need to wait for more data. Stop processing! if (cmdLength > returnObj.dataQueue) { - log.debug('larvitsmpp: lib/session.js: session() - sock.on(data) - Incomplete PDU found in dataQueue, waiting for more data to continue.'); + log.debug('larvitsmpp: lib/session.js: session() - sock.on(data) - Incomplete PDU found in dataQueue, waiting for more data to continue. Current cmdLength: ' + cmdLength + ' current queue: ' + returnObj.dataQueue.toString('hex')); break; } } }); + // Handle incoming Pdu Buffers returnObj.on('incomingPdu', function(pdu) { utils.pduToObj(pdu, function(err, pduObj) { if (err) { @@ -523,6 +537,9 @@ function session(sock) { if (pduObj.isResponse()) { // We do this so we can remove the dynamic event listeners to not have a memory leak returnObj.emit('incomingPduObj' + pduObj.seqNr, pduObj); + + // Clean up by removing this listener or else it will lurk along forever + returnObj.removeAllListeners('incomingPduObj' + pduObj.seqNr); } else { returnObj.emit('incomingPduObj', pduObj); } @@ -530,7 +547,6 @@ function session(sock) { }); }); - // Add a 'close' event handler to this instance of socket sock.on('close', function() { returnObj.emit('close');